mysql高级--索引简介
2018-03-05 18:26
190 查看
一、索引简介
1、什么是索引?(排好序的、快速查找的)
索引的本质是一种数据结构,帮助mysql高效获取数据的数据结构。可以理解为:排好序的、快速查找的数据结构。
2、为什么要创建索引?
作用:提高查找效率,类似于新华字典
功能:排序+快速查询
(注:由于索引的功能,它会影响
)
举例:若要在排好序的数据中找mysql这个单词.
先找到字母m的位置,再找第二个字母y的位置,最后找s,q,l字母的位置
如果从没排序中的数据找mysql单词,那么就得从头到尾逐个单词进行比对,效率很低
3、索引数据结构详解
数据本身之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向(引用)数据。
这样就可以在这些数据结构上实现高级查询算法,这种数据结构我们称之为:索引。
示例:B树索引(每个节点包含:索引键值+指向数据记录的物理地址的指针)
引起的问题:查询效率高了,但修改慢,在修改的时候需要修改索引
4、索引重建
数据假删除(只是修改了数据的状态)
数据频繁的删除修改和新增会导致索引不准,需要重建索引
5、索引存储方式
因索引比较大,不可能全部存储在内存中,因此索引一般以索引文件的形式存储在磁盘上
二、优势和劣势
1、优势
2、劣势
总结:多用于查多,改少的表或表字段
三、mysql的索引分类
1、单值索引:一个索引包含一个列,一个表可以有多个单值索引(最多不要超过5个)
2、唯一索引:索引列必须唯一,但允许为空
3、复合索引:即一个索引包含 多个列
注:
1、一般情况建复合索引优于单值索引,但单个查询多的情况也是有的,比如:银行卡号
2、一张表建的索引不要超过 5 个
语法:
总结更改数据表四种索引的方法:
ALTER TABLE TABLE_NAME ADD (PRIMARY KEY|UNIQUE |INDEX|FULLTEXT) INDEX_NAME(COLUMN_LIST)
四、mysql的索引结构
1、BTree索引
检索原理:
2、Hash索引
3、Full-Tree 全文索引
3、R-Tree索引
五、哪些情况需要创建索引?
1、主键自动建立唯一索引
2、步骤作为查询条件的字段应该创建索引
3、查询中与其它表关联的字段,外键关联建立索引
4、频繁更新的字段不适合创建索引:因为每次更新不单单是更新了记录,还会更新索引文件
5、where条件里用不到的字段不创建索引
6、单键/组合索引的选择问题?(在高并发下倾向创建组合索引)
7、查询中排序的字段,排序字段若通过索引去访问,将大大提高排序速度
8、查询中统计或者分组字段。
六、哪些情况不需要创建呢?
1、表记录太少
2、经常增删改的表
原因:索引虽然提高了查询速度,同时却降低更新表的速度,因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
3、数据重复且分布平均的表字段,即差异率不高的字段(如性别)。
注意:如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。因此应该 只为最经常查询和排序的数据列建索引
参考公式:假如一个表有10万行记录,有一个字段A只有T和F两种值 ,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。索引的选择性是指索引列中不同值的数目与表中记录数的比。如果一个表中有2000条记录,表索引列有1980个不同的值,
那么这个索引的选择性就是1980/2000=0.99。一个索引的选择性越接近于1,这个索引的效率就越高。
1、什么是索引?(排好序的、快速查找的)
索引的本质是一种数据结构,帮助mysql高效获取数据的数据结构。可以理解为:排好序的、快速查找的数据结构。
2、为什么要创建索引?
作用:提高查找效率,类似于新华字典
功能:排序+快速查询
(注:由于索引的功能,它会影响
* where 查询条件的条件约束 * order by 后面的排序
)
举例:若要在排好序的数据中找mysql这个单词.
先找到字母m的位置,再找第二个字母y的位置,最后找s,q,l字母的位置
如果从没排序中的数据找mysql单词,那么就得从头到尾逐个单词进行比对,效率很低
3、索引数据结构详解
数据本身之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向(引用)数据。
这样就可以在这些数据结构上实现高级查询算法,这种数据结构我们称之为:索引。
示例:B树索引(每个节点包含:索引键值+指向数据记录的物理地址的指针)
引起的问题:查询效率高了,但修改慢,在修改的时候需要修改索引
4、索引重建
数据假删除(只是修改了数据的状态)
数据频繁的删除修改和新增会导致索引不准,需要重建索引
5、索引存储方式
因索引比较大,不可能全部存储在内存中,因此索引一般以索引文件的形式存储在磁盘上
二、优势和劣势
1、优势
* 类似于图书馆建书目的索引,提高数据检索的效率,降低数据数据库的IO成本 * 通过索引对数据进行排序,降低数据排序的成本,降低CPU的消耗。
2、劣势
总结:多用于查多,改少的表或表字段
三、mysql的索引分类
1、单值索引:一个索引包含一个列,一个表可以有多个单值索引(最多不要超过5个)
2、唯一索引:索引列必须唯一,但允许为空
3、复合索引:即一个索引包含 多个列
注:
1、一般情况建复合索引优于单值索引,但单个查询多的情况也是有的,比如:银行卡号
2、一张表建的索引不要超过 5 个
语法:
总结更改数据表四种索引的方法:
ALTER TABLE TABLE_NAME ADD (PRIMARY KEY|UNIQUE |INDEX|FULLTEXT) INDEX_NAME(COLUMN_LIST)
四、mysql的索引结构
1、BTree索引
检索原理:
2、Hash索引
3、Full-Tree 全文索引
3、R-Tree索引
五、哪些情况需要创建索引?
* 手机号,微信号,银行卡号频繁的做为查询条件,所以一般都需要建立索引 * 分组group by的前提是排序,所以分组也跟索引息息相关
1、主键自动建立唯一索引
2、步骤作为查询条件的字段应该创建索引
3、查询中与其它表关联的字段,外键关联建立索引
4、频繁更新的字段不适合创建索引:因为每次更新不单单是更新了记录,还会更新索引文件
5、where条件里用不到的字段不创建索引
6、单键/组合索引的选择问题?(在高并发下倾向创建组合索引)
7、查询中排序的字段,排序字段若通过索引去访问,将大大提高排序速度
8、查询中统计或者分组字段。
六、哪些情况不需要创建呢?
1、表记录太少
2、经常增删改的表
原因:索引虽然提高了查询速度,同时却降低更新表的速度,因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
3、数据重复且分布平均的表字段,即差异率不高的字段(如性别)。
注意:如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。因此应该 只为最经常查询和排序的数据列建索引
参考公式:假如一个表有10万行记录,有一个字段A只有T和F两种值 ,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。索引的选择性是指索引列中不同值的数目与表中记录数的比。如果一个表中有2000条记录,表索引列有1980个不同的值,
那么这个索引的选择性就是1980/2000=0.99。一个索引的选择性越接近于1,这个索引的效率就越高。
相关文章推荐
- MySQL高级开发--索引简介
- MySQL索引简介
- Mysql高级索引优化案例----单表(七)
- MySQL索引简介
- MySQL高级-索引
- MySQL高级十二——索引
- MySQL高级 之 索引面试题分析
- mysql高级----索引优化(一):索引分析
- MySQL高级 之 索引失效与优化详解
- MySQL之索引简介
- 03、Mysql 索引及高级数据操作
- mysql高级----索引优化(二):索引失效案例(应该避免)
- mysql中索引的分类及简介
- MySql高级优化——索引
- 做一个合格的程序猿之MYSQL存储引擎INNODB简介--初识索引(三)
- MySQL简介之-----版本控制、锁与索引、ER图、范式
- Mysql高级之索引
- MySQL高级开发(四)---索引优化分析(MySQL执行计划解析)
- Mysql高级教程-索引-04
- MySQL索引简介