274得票7回答
在什么情况下,我应该使用唯一约束而不是唯一索引?

当我想让一列具有不同的值时,我可以使用约束。 create table t1( id int primary key, code varchar(10) unique NULL ); go 或者我可以使用一个唯一索引 create table t2( id int primary ke...

145得票4回答
优化在一系列时间戳上的查询(两列)

我在Ubuntu 12.04上使用PostgreSQL 9.1。 我需要在一个时间范围内选择记录:我的表time_limits有两个timestamp字段和一个integer属性。我的实际表中还有其他列,与此查询无关。 create table ( start_date_time t...

144得票8回答
在PostgreSQL中使用LIKE、SIMILAR TO或正则表达式进行模式匹配 在PostgreSQL中,您可以使用LIKE、SIMILAR TO或正则表达式来执行模式匹配操作。这些功能允许您根据特定的模式或规则搜索和过滤数据。 LIKE是一种基本的模式匹配方法,它使用通配符来匹配字符串。通配符包括百分号(%)和下划线(_),它们分别表示任意字符和单个字符。例如,使用LIKE 'abc%'将匹配以"abc"开头的任何字符串。 SIMILAR TO是一种更高级的模式匹配方法,它使用正则表达式来定义模式。正则表达式是一种强大的工具,可以用于更复杂的模式匹配需求。例如,使用SIMILAR TO 'a(b|c)%'将匹配以"a"开头,后跟"b"或"c"的任何字符串。 如果您需要更灵活和精确的模式匹配,可以使用正则表达式函数。PostgreSQL提供了一组内置的正则表达式函数,如regexp_match、regexp_replace和regexp_split_to_array等。这些函数允许您根据自定义的正则表达式模式对字符串进行匹配、替换和拆分。 无论您选择使用哪种模式匹配方法,都可以通过结合其他查询条件和运算符来进一步筛选和排序数据。例如,您可以使用LIKE 'abc%' AND age > 18来查找以"abc"开头且年龄大于18的记录。 总之,在PostgreSQL中,您有多种选择来执行模式匹配操作。根据您的需求和数据特点,选择合适的方法,并结合其他查询条件来实现更精确的数据过滤和搜索。

我需要写一个简单的查询,查找以B或D开头的人名: SELECT s.name FROM spelers s WHERE s.name LIKE 'B%' OR s.name LIKE 'D%' ORDER BY 1 我在想是否有办法重写这段代码以提高性能。这样我就可以避免使用or和/...

129得票7回答
如何确定是否需要或必须创建一个索引 在设计数据库时,确定是否需要创建索引是一个重要的决策。索引可以提高查询性能,但也会增加数据插入、更新和删除的开销。因此,我们需要仔细考虑何时创建索引。 以下是一些判断是否需要创建索引的指导原则: 1. 查询频率:如果某个列经常被用于查询条件,那么为该列创建索引可能是有益的。例如,如果一个表中的"姓名"列经常被用于查询,那么为该列创建索引可以加快查询速度。 2. 数据唯一性:如果某个列包含大量重复值,那么为该列创建索引可能不会带来很大的性能提升。相反,如果某个列的值几乎都是唯一的,那么为该列创建索引可能会显著提高查询性能。 3. 表大小:对于小型表,即使没有索引,查询性能可能也不错。然而,对于大型表,创建适当的索引可以极大地提高查询效率。 4. 数据修改频率:如果某个表的数据频繁进行插入、更新和删除操作,那么创建过多的索引可能会导致性能下降。因为每次修改数据时,还需要更新索引。 5. 查询复杂性:如果查询涉及多个表之间的连接和复杂的条件,那么创建适当的索引可以加快查询速度。 总之,确定是否需要创建索引需要综合考虑多个因素。在设计数据库时,我们应该根据具体情况权衡利弊,并选择合适的索引策略来提高查询性能。

我一直在我们的MS SQL数据库上运行一个自动索引工具(我修改了一个来自Microsoft的脚本,它查看索引统计表 - Automated Auto Indexing)。根据统计数据,我现在有一个需要创建索引的建议列表。 编辑:上述索引获取了DMV的信息,告诉您如果可用,数据库引擎将使用哪些...

123得票3回答
一个综合指数对于第一个字段的查询也有效吗?

假设我有一个包含字段A和B的表。我经常对A+B进行查询,所以我创建了一个复合索引(A,B)。那么仅对A进行的查询是否也会被复合索引完全优化? 此外,我还为A创建了一个索引,但是Postgres在仅对A进行查询时仍然使用复合索引。如果前面的答案是肯定的,我猜这并不重要,但是为什么默认选择复合索...

108得票3回答
在MySQL中,SELECT语句的默认记录顺序是什么?

假设你有以下的表格和数据: create table t ( k int, v int, index k(k) ) engine=memory; insert into t (k, v) values (10, 1), (10, 2), ...

93得票4回答
MySQL: 如果索引不存在,则创建索引

有没有办法在MySQL中创建一个索引,如果它不存在的话? MySQL不支持明显的格式: CREATE INDEX IF NOT EXISTS index_name ON table(column) ERROR 1064 (42000): You have an error in your ...

93得票5回答
PostgreSQL中索引的工作原理

关于 PostgreSQL 中索引的工作方式,我有几个问题。 我有一个名为 Friends 的表,它具有以下索引: Friends ( user_id1 ,user_id2) user_id1和user_id2是对应于user表的外键。 这些是否等价?如果不是,为什么? In...

86得票2回答
如果索引不存在,则创建索引。

我正在处理一个函数,如果索引不存在则允许我添加。我遇到的问题是无法获取索引列表进行比较。有什么想法吗? 这与创建列的类似问题类似,可以使用以下代码解决: https://stackoverflow.com/a/12603892/368511

81得票4回答
监控 PostgreSQL 中索引构建的进展

有没有办法监控在PostgreSQL中创建索引的进度?我正在为一个大表创建索引,我想知道这个过程进行得有多快。 有没有办法监控这个过程?