索引对于大型数据库是好还是坏?

gme*_*mon 7 mysql indexing performance

我在MySQL性能博客上读到,当表很大时,最好扫描完整的表,而不是使用索引.

我有一张数千万行的表.在进行查询时,如果我不使用索引,那么查询比使用索引慢24倍.我知道很多事情可能会导致这种情况(例如,行是按顺序存储的),但是请你给我一些提示可能会发生什么?或者我应该如何开始研究这个问题?我想了解何时首选使用索引,何时不使用索引

谢谢

ang*_*son 8

文章说,在处理非常大的数据集时,您需要使用的行数接近表中的行数,使用索引可能会损害性能.

在这种情况下,只要您需要的数据多于索引中存在的数据,通过索引确实会损害性能.

要经过索引,数据库引擎首先要读取索引表中的大部分(这是一个类型的表),从这个结果,然后对每一行(或一组行),进入到真正的表,并开始采樱桃谬误要阅读的页面.

另一方面,如果您只需要检索已经成为索引表一部分的区域的列,那么数据库引擎只需从中读取,而不是继续查看完整表以获取更多数据.

如果您最终阅读大部分或接近大多数相关的实际表,那​​么处理索引所需的所有工作可能比仅仅进行完整的表扫描开销更多.

现在,这是文章的全部内容.对于处理数据库的大多数工作,使用索引是完全正确的事情.

例如,如果您需要提取一小组行,那么通过索引而不是全表扫描将会更快地获得许多数量级.

在任何情况下,如果你有疑问的时候,你应该做一些性能分析,找出你的应用在不同类型的负载下的行为方式,然后开始调整,不要把单篇文章的银弹什么.

例如,为了加快问题上做计数的例子查询的一种方式pad在文章中列,将创建一个既包括单个索引valpad,这样,计数,简直是一个索引扫描,而不是索引扫描+表查找,并且比完整的表扫描运行得更快.

您最好的选择是了解您的数据,进行实验,并了解您使用的工具是如何工作的,所以确实要了解有关索引的更多信息,但最终,决定什么才是最适合您的程序的.