我今天被问到一个问题,我什么时候不想在桌面上创建SQL索引。
我唯一能想到的就是你不需要一个(即一张小桌子)。那个答案感觉不对。当我应该使用索引并且不应该使用时,是否存在阈值?
答案 0 :(得分:4)
如果不在表上创建索引,则需要考虑很多事项。
首先,您可以创建许多可能的索引。例如,您可以创建一个索引,不仅包含表中的每个列,还包含列的每个排列(因为索引中的列排序很重要)。随着列数的增加,这可能是大量的索引。
每个索引都带有许多以不同方式降低性能的东西。例如,它们可以从可用内容中获取内存/磁盘空间。可能比这更糟糕的是,索引需要在更新下面的表时更新。这意味着表中的每次插入/更新/删除都可以触发索引更新。由于您有更多索引,因此需要更新更多索引,这可能会降低CUD操作的性能,如果您经常这样做,可能会破坏服务器性能。
由于这种性能影响,您希望避免使用“无用”索引。用于每个查询的索引通常都很好,但是对于< 1s查询每天只使用一次的索引可能是无用的。在尝试确定哪些索引足够有用并且其性能优势大于性能命中时,这都是一种权衡。
答案 1 :(得分:1)
你可以用另一个问题回答:你什么时候需要索引?
如果要搜索条目,则需要索引才能更快地获得结果。例如,如果列在where子句中使用。当然你可以尝试索引所有内容,但索引会导致你使用额外的内存/硬盘。因此,您只需索引用于查找行的列。
在尝试查找行时,MySQL正在读取哪些行,您可以使用EXPLAIN command进行分析。
这有帮助吗?
答案 2 :(得分:1)
根据经验,在小表(小于约100'000行)上删除除主键上唯一索引之外的所有索引。
此外,如果该列不用于搜索目的(例如员工的工资),则使用索引是不合适的。