• 索引的点


    索引的分类:

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

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

      

    最左前缀是什么意思?

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

  • 相关阅读:
    WPF数据绑定机制是如何实现
    C#自定义特性的使用
    MVVMLight学习笔记(一)---MVVMLight概述
    C# Autofac学习笔记
    EFCodeFirst快速搭建入门
    SQL having与where用法区别
    EventWaitHandle 类
    C# EF 使用 (CodeFirst模式)
    wmi 远程启动程序
    Centos 7 的一些 基础知识
  • 原文地址:https://www.cnblogs.com/shuai666/p/14523012.html
Copyright © 2020-2023  润新知