索引分类
主键/唯一
- 只有主键索引只能唯一
聚集索引/非聚集索引
聚集索引选取规则:
- 有主键,使用主键
- 无主键,将使用第一个唯一索引
- 无主键,无唯一索引,会自动创建rowid作为聚集索引
聚集索引和二级索引的结构
查询where name = ‘Arm’的过程:
- 先用二级索引查询得到Arm对应的主键
- 再用聚集索引拿到整行数据
这个过程为回表查询
性能分析
第一条,在聚集索引中对比,直接拿到10对应的行数据,一次扫喵完成;
第二条,先到name中的索引中去查找,拿到对应的主键数据后,再到聚集索引中查找,进行回表查询,相较于第一条,效率更低。
若一行数据大小为1k,一页是16k,所以最多存放16行数据。InnoDB的指针占用6个字节空间,key占用字节(根据主键类型),int占用4个字节,bigint占用8个字节。
2kw行数据也就三层!!!
使用规则
索引语法
按照需求完成索引创建
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)创建全文索引
最左前缀法则
-
如果索引了多列,要遵守最左前缀法则,最左边的字段必须存在,放的位置不重要。查询从索引的最左列开始,不能跳过索引中的列,否则将后面的字段将失效。
-
在范围查询中,如果出现<>符号,后面的索引将失效;规避方法,使用>= 或者 <= 符号