• 索引的点


    索引的分类:

      聚集索引:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。

      非聚集索引:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引。

      

    最左前缀是什么意思?

      比如给t_user表的a,b,c 三个字段创建了索引,就是索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始,并且不跳过索引中的列。

      

    select * from t_user where a=""and b=""and c=""
    
    select * from t_user where a=""and b=""
    
    select * from t_user where a=""

      以上sql语句索引有效。

    回表是什么意思?

      select * from t_user  where a="";

      这条sql就会造成回表,因为mysql会根据索引a先查询出a所在的主键id来,然后在根据id来查询整条语句。

      差不多就是索引出去又回到主键。

      总结:如果使用索引数据库首先查找索引,而不是漫无目的的全表遍历。

    索引覆盖是什么意思:

      select a from t_user where a"";

      索引覆盖了要查询的字段。

    加一个问题,顺便浅谈一下聚簇索引和非聚簇索引

    索引为什么用在很多值重复的字段上会失效?

    首先我们要明白一点:一个表只能有一个聚簇索引,默认是主键(就算我们创建表的时候没有主键,引擎也会默认给加一个),但一个表可以有多个非聚簇索引(唯一索引,全文索引都是)

    而且非聚簇索引会包含聚簇索引的引用,如果 select 字段不在非聚簇索引内,就需要跳到主键索引。
    如果非聚簇索引值重复率高,那么查询时就会大量出现上图中从右边跳到左边的情况,导致整个流程很慢(想一想回表)

     参考自:https://www.cnblogs.com/buwuliao/p/11650363.html

  • 相关阅读:
    ubuntu server编译安装nginx
    XPath具体解释
    windows下安装,配置gcc编译器
    给字符数组赋值的方法
    开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
    MiinCMP1.0 SAE 新浪云版公布, 开源企业站点系统
    Mac下cocos2dx-3.0打包Android时,提示"SimpleAudioEngine.h"not found的解决方法
    GG同步到sqlserver报错一例 Invalid date format
    分布式文件系统
    动画clip仅仅读的解决的方法,以及动画关键帧回调的办法
  • 原文地址:https://www.cnblogs.com/shuai666/p/14523012.html
Copyright © 2020-2023  润新知