zoukankan      html  css  js  c++  java
  • 索引的点

    索引的分类:

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

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

      

    最左前缀是什么意思?

      比如给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

  • 相关阅读:
    C#中IPAddress转换成整型int
    没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
    VB.NET或C#报错:You must hava a license to use this ActiveX control.
    c#几种随机数组和数组乱序
    C#封装的websocket协议类
    VB生成条形码(EAN-13)
    VB控件间的拖放
    VB用API模拟截屏键PrintScreen
    VB读写进程的内存
    几个VB常见又内涵的错误
  • 原文地址:https://www.cnblogs.com/shuai666/p/14523012.html
Copyright © 2011-2022 走看看