mysql索引问题,两个但索引是否会提高查询速度?

我需要用两个条件来查询,比如 where A = a and B = b,如果我用A建立了索引,那么我再用B建立索引会不会提高查询速度?
这两个索引都是单索引,不是联合索引。

阅读 5.4k
3 个回答

你跑一下 benchmark 呀,这种 性能问题 需要结合多方面因素,特别是数据量的问题。

先说结论:会

索引本质上是独立的索引文件,里面按照特定的顺序(一般采用B+树结构)记录了数据字段(A,B)和实际数据存储位置
在没有索引的时候,如果要查询某个字段=值,则需要遍历所有实际数据,然后和字段对比,也就是全表扫描
然而在拥有索引的时候,则不需要查询原始数据,只需要查询索引文件,分别查询出A和B匹配的记录,然后计算他们的交集,最后再根据索引中记录的实际位置去读取数据,避免了全表扫描
上面也说了,索引的记录是拥有特定顺序的,姑且不讨论细节,假设顺序是从小到大依次排列,那么最简单的就可以通过二分查找来定位匹配项,比遍历查询已经不知道快了多少了

联合索引我不太清楚具体mysql内的实现方式,按照我个人的理解,联合索引和单索引的区别在于联合索引更加节约空间,两个字段的单索引就是两个索引文件,而联合索引是一个索引文件,内部类似于把多个字段字段按顺序混合成了一个字段进行了索引,所以联合索引并不能跳过A字段来快速搜索B字段,当然具体实现远比这个复杂,可以说肯定不可能通过简单的混合字段来实现联合索引,具体细节只能等熟悉mysql实现细节的大佬来回答了,这个我真的不知道

联合索引这块我的确很少用不清楚,个人理解可能是错误的,欢迎大佬纠正

不一定,而且大多数情况下是更慢(有索引合并问题)。
以前写过一篇文章:MySQL多列索引应用

推荐问题