异常500,程序异常,Exception
当前位置:Exception500 » MySQL » 第三部分:MySQL索引介绍

第三部分:MySQL索引介绍

来源:exception500.com    发布时间:2020-05-15 15-57-01    浏览次数:1000次

###第三部分:MySQL索引介绍

一、MySQL索引

建立索引的目的:

为表Table建立“目录”,防止全表扫描(Full Scan)

索引的存储形式是由存储引擎决定的

降低了写入数据的效率,太多的索引增加了查询优化器的选择时间,不合理的使用索引会大幅占用磁盘空间


不会用到索引的场景:

索引选择性差

<> /not in无法使用索引,is null会使用索引,is not null 不会使用索引

where子句跳过索引左侧列,直接查询右侧索引字段

对索引列进行计算或者使用函数


二、索引的分类:

按照存储结构分类:BTree索引(B-Tree、B+Tree)、Hash索引、full-index全文索引、R-Tree索引

应用层次划分:普通缩影、唯一索引、符合索引

根据数据的物理顺序和键值逻辑顺序关系:聚集索引、非聚集索引

B+Tree索引:适合范围查找,采用的是树形链表结构保存“目录”

Hash索引:精准匹配


B+Tree索引:

聚集索引,适合范围查找

创建和删除索引:create index idx_uid(uid) on user;  drop index idx_uid on user;

B+tree索引支持精确索引、范围查询、where条件后的类型最好和数据库一致;

对于字符串like查询,B-tree支持前缀查询,如:LIKE ‘xxxx%’,后缀查询和模糊匹配B+tree都不支持,如:LIKE ‘%xxxx’,LIKE ‘%xxxx%’


B+tree复合索引:

create index idx_uid(uid,mobile) on user;

复合索引查询条件必须包含左侧列:select * from user where uid = 1

直接树勇右侧列将无法使用索引:select * from user where mobile = 'xxx'

使用<>和not in会导致不能使用索引:select * from user where uid <> 1


Hash索引:

基于hash表实现,精确匹配索引所在列才有效,不支持范围查询和模糊查询和排序

Hash索引为每条数据生成一个HashCode,只包含和Hash 值和行指针



[关键词: 索引B+TreeHash ]

软件开发 程序错误 异常 500错误 Exception Copyright© 2019-2021  Exception500 版权所有  【蜀ICP备15020376号-9】  网站地图