MySQL:索引的使用
·
1、索引的分类
1.1 数据结构
B+树索引:InnoDB和MyISAM都默认用,多层平衡树结构,叶子节点用链表串起来,既能快速定位单条记录,又能高效做范围扫描。
哈希索引:Memory引擎默认,通过哈希函数直接计算出数据位置,不支持范围查询和排序。
全文索引:把文本分词后建倒排索引,类似搜索引擎的原理。
空间索引:基于R树实现,专门处理地理坐标这种多维数据,支持区域查询、距离计算。
1.2 InnoDB的存储方式
聚簇索引:就是主键索引,叶子节点存储完整的行数据,数据按主键索引顺序物理存储。
非聚簇索引:又叫二级索引,叶子节点只存储索引字段值和主键值。查询非索引字段时,还需要根据主键值去聚簇索引获取数据。
1.3 索引性质
主键索引:值唯一且非空,一张表只能有一个主键索引,InnoDB中的聚簇索引就是主键索引。
唯一索引:值唯一,但允许null存在,可以有多个null。
普通索引:对值没有约束。
联合索引:多条列组合成一个索引,遵循最左前缀匹配原则。
全文索引:文本搜索用。
空间索引:GIS数据用。
2、索引的创建与失效场景
2.1 创建索引
索引一般在表创建时就一同创建出来,所以这里仅写了建表时的创建语法,且这里的表结构仅为创建索引的演示,在实际设计表时不做参考。
create table user_info(
id int primary key auto_increment,#主键索引
username varchar(20) not null,
password varchar(20) not null,
article varchar(20) not null,
location POINT NOT NULL,
index index02(password),#普通索引
unique index index01(username),#唯一索引
index index03(username,password),#联合索引
fulltext index index04(article),#全文索引
SPATIAL INDEX index05(location)#空间索引
);
2.2 索引的失效场景
- where条件进行了函数套用。
- like的%放在了左边,如 '%匹配词' 。
- where条件进行了算数运算。
- or的前后只有一个走索引。
- str时varchar类型,条件为str = 1,发生隐式转换。
- 在联合索引中,对某一列进行>、<的范围查询,该列后就不会走索引了。
- 联合索引没有走最左匹配原则。
最左前缀匹配原则:联合索引在创建时的顺序,如果是(a,b,c),那在查询时也要按照这个顺序,如:where a = 1 and b = 3 and c = 3 。不能越过a或b列,否则就走不了索引。
更多推荐


所有评论(0)