通俗的解释什么是复合索引和最左原则

1.什么是复合索引?

顾名思义,复合索引的意识就是,将数据库中的多个字段组合起来形成的一个索引就是复合索引。创建复合索引的方式如下图所示:
(1)使用Navicat创建
在这里插入图片描述(2)使用SQL语句创建

UNIQUE key 'idex_test'('bid','bnumber','bname') USING BTREE.

2.什么是最左原则

最左原则说是,在SQL语句中,复合索引的第一个字段必须出现查询语句中,这样索引才能够被使用。
(1)比如下面的查询语句,就会使用到复合索引:

select * from book where book.bid='1'

我们使用explain关键字来查看一下:

explain select * from book where book.bid='1'

在这里插入图片描述
我们可以看到这条SQL使用到了索引。
(2) 但是如果我们使用复合索引的除第一个字段以外的其它字段进行查询的时候,则不会走索引,如下面的SQL:

select * from book where book.bnumber='10001'

在这里插入图片描述我们可以看到这条SQL并没有走索引。因为‘bnumber’这个字段并不是索引的第一个字段,所以索引失效!

2.1 为什么会出现这样的情况?

好,如果你也有这样的疑问,说明你是个爱动脑筋、爱思考的小朋友。我们接着往下走。

索引,其实就是相当于一本厚厚字典的目录,如果你想要找到一个字,在没有目录的情况下你需要手动的从第一页开始找直到找到那个字为止(当然这里只是举这个例子,有些人查字典真的不用目录的~)如果有了目录的话我们可以从目录中轻松的把我们想要找的字找出来

这和复合索引有什么关系呢?比如来说你需要查“胡”这个字,他的部首是“月”,我们去部首检字表中找到“月”,然后我们数“古”有5画,最后,我们就成功的在“月”所在的部首检字表中,找到了“胡”字所在的页。

复合索引的道理和上面的例子是一样的,“胡”字的部首“月”相当于复合索引中的第一个字段“bid”,然后“古”字有几画就相当于复合索引中的第二个字段“bnumber”,在查找的过程中我们是通过部首定位到部首检字表,再通过“古”字有5画从部首检字表定位到具体的字。如果我们连“胡”字的部首都不知道,那么我们如何找到部首检字表所在的位置呢?,所以这就是为什么复合索引的除第一个字段以外的其它字段进行查询的时候,不会走索引的原因。这就是最左原则。

3.使用复合索引的目的?

  • 能够形成索引覆盖,提高where查询的效率

4. 复合索引的列越多越好吗?

  • 索引并不是越多越好,恰恰相反,因为在新增数据时,会更新索引影响写入的效率。

猜你喜欢

转载自blog.csdn.net/qq_42785250/article/details/107289234