数据库基础04-几种常见索引

参考图书:《高性能MYSQL》

1.数据库索引的特点

1.1 索引的有效范围

因为索引一般使用BTree做数据存储结构,索引查询的有效范围为:

1.全值匹配;
2.匹配最左前缀;
3.匹配列前缀
4.匹配范围值;
5.精确匹配一列并范围匹配另外一列;
6.只访问索引的查询;

2.聚簇索引 和非聚簇索引

2.1 什么是聚簇索引

     聚簇索引是一种数据存储方式。聚簇索引的所有数据都放在它的叶子节点。一个表只有一个聚簇索引。
innodb默认是主键为聚簇索引,如果没有主键,innodb会隐式的创建一个主键作为聚簇索引。
如下图所示:
数据库基础04-几种常见索引_第1张图片
数据库基础04-几种常见索引_第2张图片

优点:
1.数据存储在一个位置;查询速度比较快,提高了I/O密集型应用的性能;
缺点:
1.不适合做内存存储。
2.插入速度依赖于插入的顺序。
3.插入新行或者主键新增移动行时,面临页分裂的情况。

2.2 聚簇索引二级索引(非聚簇索引)

     Innodb和Myism的二级索引存储数据会有很大的差别。
     Innodb是叶子节点存储的是主键,作为指向行的指针,好处在于减少行移动,或者数据页分裂的二级索引的维护工作。
非聚簇索引和聚簇索引不同的是,非聚簇索引的子叶节点存储的是主键,和索引列的值。(图中的 key + pk cols)

数据库基础04-几种常见索引_第3张图片

2.组合索引

2.1 要注意的点

1.索引的最左匹配原则
假如创建了索引(ABC)三列

索引组合 是否有效 备注
(ABC)、(AB)、(AC) 有效
(BC) 无效

2.范围查询后的列无法使用索引

create index produ_index on produ(type,sub_name,sub_id);
select type,num from produ where type='fruit' and sub_name like 'ap%' and sub_id='235948'
2.2 索引顺序的选择

1.通常情况,选择性高(重复度低)的放在前面。

  • 如何判断多个索引列重复度?
select count(distinct type)/count(1) as type_selectity,
count(distinct sub_name)/count(1) as name_selectity,
count(distinct sub_id)/count as sub_id_selectity
from produ
 
查询出来的数值越小,就在前面

3.创建索引注意的问题

3.1避免创建重复索引
重复索引,是指创建列和列顺序相同的索引。这样会造成MYSQL索引进行筛选,降低性能。

3.2避免创建冗余索引
冗余索引,例如创建了一个索引(A,B),根据索引的最左原则,再创建索引(A)就属于冗余索引。

你可能感兴趣的:(数据库基础04-几种常见索引)