什么时候不适合使用SQL索引

时间:2013-07-25 21:37:41

标签: sql

我今天被问到一个问题,我什么时候不想在桌面上创建SQL索引。

我唯一能想到的就是你不需要一个(即一张小桌子)。那个答案感觉不对。当我应该使用索引并且不应该使用时,是否存在阈值?

3 个答案:

答案 0 :(得分:4)

如果不在表上创建索引,则需要考虑很多事项。

首先,您可以创建许多可能的索引。例如,您可以创建一个索引,不仅包含表中的每个列,还包含列的每个排列(因为索引中的列排序很重要)。随着列数的增加,这可能是大量的索引。

每个索引都带有许多以不同方式降低性能的东西。例如,它们可以从可用内容中获取内存/磁盘空间。可能比这更糟糕的是,索引需要在更新下面的表时更新。这意味着表中的每次插入/更新/删除都可以触发索引更新。由于您有更多索引,因此需要更新更多索引,这可能会降低CUD操作的性能,如果您经常这样做,可能会破坏服务器性能。

由于这种性能影响,您希望避免使用“无用”索引。用于每个查询的索引通常都很好,但是对于< 1s查询每天只使用一次的索引可能是无用的。在尝试确定哪些索引足够有用并且其性能优势大于性能命中时,这都是一种权衡。

答案 1 :(得分:1)

你可以用另一个问题回答:你什么时候需要索引?

如果要搜索条目,则需要索引才能更快地获得结果。例如,如果列在where子句中使用。当然你可以尝试索引所有内容,但索引会导致你使用额外的内存/硬盘。因此,您只需索引用于查找行的列。

在尝试查找行时,MySQL正在读取哪些行,您可以使用EXPLAIN command进行分析。

这有帮助吗?

答案 2 :(得分:1)

根据经验,在小表(小于约100'000行)上删除除主键上唯一索引之外的所有索引。

此外,如果该列不用于搜索目的(例如员工的工资),则使用索引是不合适的。