【SQL】 索引性能分析及使用规则

167 阅读2分钟

索引分类

主键/唯一

image.png

  • 只有主键索引只能唯一

聚集索引/非聚集索引

image.png

聚集索引选取规则:

  1. 有主键,使用主键
  2. 无主键,将使用第一个唯一索引
  3. 无主键,无唯一索引,会自动创建rowid作为聚集索引

聚集索引和二级索引的结构 image.png

查询where name = ‘Arm’的过程:

  1. 先用二级索引查询得到Arm对应的主键
  2. 再用聚集索引拿到整行数据

这个过程为回表查询

性能分析

image.png

第一条,在聚集索引中对比,直接拿到10对应的行数据,一次扫喵完成;
第二条,先到name中的索引中去查找,拿到对应的主键数据后,再到聚集索引中查找,进行回表查询,相较于第一条,效率更低。

  1. image.png

若一行数据大小为1k,一页是16k,所以最多存放16行数据。InnoDB的指针占用6个字节空间,key占用字节(根据主键类型),int占用4个字节,bigint占用8个字节。

image.png

2kw行数据也就三层!!!

使用规则

索引语法

image.png

按照需求完成索引创建

image.png

show index from tb_user:看key_name
1.create index index_user_name on tb_user(name)InnoDB表创建时默认B+树类型
2.create unique index_user_phone on tb_user(phone) 创建唯一索引
3.create index idx_user_pro_age_sta on tb_user(profession,age,status)创建联合索引
4create fulltext index index_user_email on tb_user(email)创建全文索引

最左前缀法则

  1. 如果索引了多列,要遵守最左前缀法则,最左边的字段必须存在,放的位置不重要。查询从索引的最左列开始,不能跳过索引中的列,否则将后面的字段将失效。

  2. 在范围查询中,如果出现<>符号,后面的索引将失效;规避方法,使用>= 或者 <= 符号

image.png