• mysql 索引失效情况/sql提示/覆盖索引和回表查询


    索引失效

    1:模糊查询,当我们建立一个索引emp_name时,对emp_name进行模糊查询时,索引是不会生效的,因为搜索树不支持[学了数据结构就是爽]

    2:or条件查询,当我们写了一个由or链接的条件语句时,当且仅当语句中存在一个或以上的字段没有建立索引时,语句中的全部索引都不会生效,这个很好理解,因为存在一个无索引字段说明我们要对整个表进行一次扫描,这个时间复杂度是o(n)的,所以o(logn / 1)的查询就变得没有必要了

    3:字符字段不加双引号,这个...I don't understand

    4 :mysql评估使用索引比全表扫描还慢的话,则不使用索引;

    sql提示

    使用情景:

    当我们写一个查询语句时,用到的条件语句可以对于多个索引,系统会评判索引的效率,然后选择使用哪个索引,但是有的时候我们需要指定某个索引,这个时候我们就可以用sql提示了

    1:use提示

            建议系统用每个索引,但是最终决策权在系统。

    select 字段1,字段2... from table use(index_name) where expression

    2:ignore提示

            与use相反,ignore是建议系统忽略某个索引

    select 字段1,字段2... from table ignore(index_name) where expression

    3:force提示

            强制系统使用某个索引,如果指定的索引不合法,则报错

    select 字段1,字段2... from table force(index_name) where expression

    覆盖索引/回表查询

    首先,索引分为聚集索引和辅助索引,在B+树结构中,聚集索引中的叶子节点会存储一行的数据,辅助索引是存储对于行的聚集索引字段,当我们要查询一行的所有数据且用辅助索引时,系统会先在辅助索引中找到对应行的聚集索引的字段和辅助索引的字段,然后根据聚集索引来找到对应行数据并返回;

    这里就引申出覆盖索引和回表查询的概念了,首先我们用select语句定然是要访问某些字段的,如果我们用辅助索引来查询,且查询的字段为被辅助索引中的字段和聚集索引的字段并集的子集,那么我们是不需要访问聚集索引了,因为我们需要查询的子段已经找到了,这就是覆盖查询

    回表查询是“通过辅助索引找到聚集索引的字段如,然后到聚集索引找数据”的过程

  • 相关阅读:
    centos7安装mysql8
    vue.js毕业设计,基于vue.js前后端分离订座预约小程序系统 开题报告
    基于Java所涉及的人工智能的框架
    spark实验求TOP值
    C++中将指针传递给函数
    Codeforces 398C LRU (概率dp)
    异构数据库
    Centos7使用nginx搭建rtmp流媒体服务器
    [ 已解决 ]Splunk ES 升级后有些 alert 不能删除
    [附源码]Python计算机毕业设计SSM开放性实验室网上预约管理(程序+LW)
  • 原文地址:https://blog.csdn.net/weixin_62953519/article/details/127441014