mysql索引是如何实现的

mysql索引是如何实现的,第1张

索引的创建很简单,可以网上查下相关信息,在这里只是说下索引需要注意的地方,索引分为很多不同的类型,一般咱们说的是B_Tree索引,这里就只说B_Tree,如果是哈希索引,可以网上找相关资料。

.B_Tree适用于:

1.全值匹配

全值匹配是指和索引中的所有列进行匹配。

2.匹配最左前缀

匹配左左前缀即只使用索引的第一列

3.匹配列前缀

匹配某一列开头部分(指的第一列)。

4.匹配范围

5.精确匹配某一列并范围匹配另一列

6.只访问索引的查询

只需访问索引,无需访问数据行。

.B_Tree限制

1.如果不是按照索引的最左列开始查找,则无法使用索引。

2.不能跳过索引中的列。

3.如果查询中有某个列的范围查询,则其右边左右列无法使用索引优化查找。

原始sql

他的执行计划

可见,这个sql执行过程是被命中索引了的,索引如下

这个索引创建的稍微有点问题,在查询筛选中,如果用到了范围查询,在创建联合索引的时候,应该尽量把需要范围查询的字段放在最后

在上面创建的索引中,首先命中 f_start_time 字段索引,由于他是当前联合索引的第一个字段,那么他就不会在去走索引的第二个字段了;

他的执行过程是先通过索引查询出符合时间范围的数据,由引擎返回给服务器,然后服务器再执行where条件筛选,故在extra中出现了 using where

为了解决这个问题,创建这个索引的过程应该是本着让索引命中更多列的原则,把startTime字段放在联合索引的最后,优化后的索引如下:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7512962.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存