mysql索引

来源:互联网 发布:免费视频字幕制作软件 编辑:程序博客网 时间:2024/05/22 13:31

索引是什么?

mysql官方对索引的定位为:索引是帮助mysqlk高效获取数据的数据,可以得到索引的本质:索引是数据结构。

索引可以简单理解为“排好序的快速查找数据结构”

索引的目的在于提高查询效率。在查询‘mysql’这个字符串的时候,如果是排序好的,先定位到m字母,然后在m的区间找y....如果未排序的,那么每次都是要扫描全部数据来定位一次。

所以可以理解为‘排好序的快速查找数据结构’。从这句话也可以得到,索引用于排序快速查询。所以会影响到where后面的查找条件和order By 后面的排序字段。

在数据之外,数据库还维护这满足特定查询算法的数据结构,这些数据结构以某种方式的指向数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构,就是索引,对应到 java B树

下图演示,1,2,3,4,5.。是数据内容 col2加了索引的字段,右边的树形结构就是索引系统,通过索引系统能快速定位到数据内容的地址。



数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。

一般来说,索引本身也很大。不可能全部存储在内容中,因此,索引往往以索引文件的形式存储在磁盘上。

优势:提高数据检索的效率,降低数据库的io成本

           通过索引对数据的排序,降低排序成本,降低cpu的消耗

索引的分类:

1.单值索引:一个索引只包含一个单列,一个表可以有多个单值索引。

2.唯一索引:索引列的值必须唯一,允许为空(银行系统的银行卡号)

3.复合索引:一个索引包含了多列。

mysql索引结构:

1.BTree树

2.hash索引

3.full-text索引全文索引

4.r-tree索引

后三种知道即可,和开发相关是第一个 BTree树索引。

那些情况下需要建立索引:

1.主键自动递增,建立唯一索引

2.频繁作为查询字段的条件应该建立索引

3.查询中与其他表关联的字段,外键关系的字段

4.频繁更新的字段不适合建立索引,每次更新还会更新索引树。

5.where条件中,用不到的字段不用创建索引

6.查询中排序的字段可以建立索引,大大加快排序速度。

7.查询中统计或者分组的字段。

mysql 300w左右开始性能下降,虽然官方说5-8百万左右



0 0
原创粉丝点击