索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表以查找相关行。
这是我们心爱的MySQL手册所说的。
在这种情况下,为什么不对每个列都建立索引呢?
由于我有这种感觉,它会对性能造成更大的影响,那么我们应该在什么时候使用索引/索引的最佳实践?
提前致谢!
索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表以查找相关行。
这是我们心爱的MySQL手册所说的。
在这种情况下,为什么不对每个列都建立索引呢?
由于我有这种感觉,它会对性能造成更大的影响,那么我们应该在什么时候使用索引/索引的最佳实践?
提前致谢!
创建索引总是会付出代价:在一张表上拥有的索引越多,修改该表的代价就越大(即插入、更新和删除需要更长时间)。
反之,可以使用索引的查询将更快。这是一个经典的权衡考虑。在大多数表上,一小部分常用的索引值得成本,因为查询频繁(或者它们的性能比修改性能更重要)。
另一方面,如果你有某种非常频繁更新但很少查询的日志表(例如在灾难性故障时),添加索引将增加很大的成本并提供非常少的好处。
此外: 索引是否有用很大程度上取决于要执行的确切查询。可能您拥有覆盖每个列的索引,但是查询无法使用它们,因为索引顺序错误、信息错误或格式错误。因此,并不是所有索引都适用于所有查询。
通常,索引在具有良好选择性时非常有用,即当查询基于索引属性的值(或范围)选择少量数据时。
此外,当通过连接属性在两个连接表中对行进行排序时,索引对于合并连接也很有用,这样可以匹配行并在一次检索中检索数据。
正如已经提到的那样,索引会减慢更新速度并占用一些内存(这本身也会降低性能)。