2009-08-21 21 views

回答

3

构建索引需要的时间比仅执行表扫描要花费的时间更长。因此,如果您的单个查询 - 只运行一次 - 只是表扫描,则添加索引将会变慢。

但是,如果您的单个查询不只是表扫描,则添加索引可能会更快。例如,如果没有索引,数据库可能会执行多次表扫描的连接,每个连接的行一次。那么索引可能会更快。

我会说要对它进行基准测试,但对于一次性查询而言,这听起来很愚蠢,您只会运行一次。

+0

由于没有INDEX,SELECT将执行表扫描,使用新的INDEX将一次将数据库索引保存为较慢。 – Galaxy 2009-08-21 06:26:38

+1

表扫描通常是O(n);索引通常是树,因此构建索引可能不会比O(n)+ O(n * log(n))[n =行数]更快。 – derobert 2009-08-21 06:45:26

0

如果你考虑设置和索引一个只有两个可能值的列,那么这是不值得的,因为索引几乎没有什么改进。索引对于具有高度唯一性并经常查询特定值或范围的列很有用。在其他硬指标使插入和更新慢,所以在这种情况下,你应该跳过它。

+1

对于只有两个值的列,索引可能值得。例如,也许你有一个包含大量行的表,并且布尔标志“这是否需要处理?”。假设大多数事情不需要处理,那么索引可能会大大加快“查找需要处理的东西”的查询。一般来说,指数很好地发现了罕见的价值,无论该集合的整体基数如何。 (非常高的基数是一种特殊情况,其中* all *值很少) – derobert 2009-08-21 06:28:05

+0

所以如果我想选择一个列。多次(约100 k)两种可能性,我应该建立一个指数? – Galaxy 2009-08-21 06:28:58

+1

......罕见的定义为小于1-10%,这取决于许多因素,例如随机访问表的花费与顺序访问的花费有多大。 – derobert 2009-08-21 06:29:57

相关问题