MySQL:索引的使用

张开发
2026/4/8 12:35:15 15 分钟阅读

分享文章

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列否则就走不了索引。

更多文章