您的位置:首页 > 数据库 > MySQL

mysql高级--索引简介

2018-03-05 18:26 190 查看
一、索引简介

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,这个索引的效率就越高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: