索引,为什么不只是索引所有内容以及何时使用索引?

时间:2011-06-15 13:42:41

标签: mysql database performance indexing

  

索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表以查找相关行。

说我们心爱的MySQL manual

在这种情况下,为什么不直接索引每一列?

因为我觉得这会对性能产生更大的影响,我们应该何时使用索引的索引/最佳实践

提前致谢!

3 个答案:

答案 0 :(得分:13)

创建索引总是需要付出代价:表上的索引越多,修改表就越贵(即插入,更新和删除需要更长时间)。

反过来,可以使用索引的查询会更快。这是一个经典的权衡。在大多数表中,少量常用索引值得花费,因为查询经常发生(或者它们的性能比修改性能重要得多)。

另一方面,如果你有一种经常更新的日志表,但很少查询(例如在发生灾难性故障的情况下),那么添加索引会增加很大的成本并提供非常好的小优势。

另外:索引是否有用取决于要执行的确切查询。您可能有索引跨越每列,但查询不能使用它,因为索引顺序错误,信息错误或格式错误。因此,并非所有索引都能帮助所有查询。

答案 1 :(得分:1)

根据您的逻辑,您不会仅为每列编制索引,而是每列的每个排列。存储这些信息并使其保持最新所涉及的开销将非常大。

答案 2 :(得分:1)

如果索引具有良好的选择性,即当查询根据索引属性的值(或范围)选择一小部分数据时,通常索引是有用的。

此外,indice适用于合并连接,当两个连接表中的连接属性对行进行排序时,可以匹配行并一次检索数据。

正如已经提到的,索引会降低更新速度并占用一些内存(这本身也会降低性能)