原文出处: andyqian
前言
继上篇《读懂MySQL执行计划》后,在文章末尾,我们谈到了索引的概念,那么,今天我们就一起来聊一聊MySQL索引。
什么是索引?
百度百科是这样描述的:
索引是为来加速对表中数据行中的检索而创建的一种分散的数据结果,时针对表而建立的,它是由数据页面以外的索引页面组成,每个索引页中的行都含有逻辑指针,以便加速检索物理数据
其实,索引的概念大家都很清楚,也知道索引能够提升查询效率,但大部分童鞋在怎么建索引,建在哪些字段上有以下常见误解:
- 新建表时不需要建索引,后续才添加索引
- where条件后的字段均建索引
- 简单SQL不需要索引,联合查询才需要索引
- 联合索引的顺序是where条件后字段的先后顺序
- 对于区分度小的字段上也新建索引,如状态,性别等字段等。
索引区分度
在说上述问题之前,我们先来看看另一个概念,就是区分度。
区分度: 指字段在数据库中的不重复比
区分度在新建索引时有着非常重要的参考价值,在MySQL中,区分度的计算规则如下:
字段去重后的总数与全表总记录数的商。
例如:
select count(distinct(name))/count(*) from t_base_user;
结果如下:
count(distinct(name))/count(*) |
---|