标签:记录 问题 参与 sam 模糊 gen rop 比例 表数据
什么是索引:
索引就相当于书的目录,是mysql中一种专门的数据结构,称为key,
索引的本质原理就是通过不断的缩小查询范围,来降低io次数从而提升查询性能
强调:一旦为表创建了索引,以后的查询都会先查索引,再根据索引定位的结果去找数据
三种:primary key 约束,加速
unique 约束,加速
index key 仅加速
为什么要用索引:
对于一个应用来说,对数据的读写比例基本是10:1,即读多写少,而且对于写来
说极少出现性能问题,大多数性能问题都是慢查询,提到加速查,就必须用到索引
索引的影响:
1.在表中有大量数据的前提下,创建索引速度会很慢
2.在索引创建完毕后,对表的查询性能会大幅度提升,但是写性能会降低
索引的查找原理:
B+树
浅蓝色 磁盘块
深蓝色 数据项,包含具体数据
黄色 指针,每个磁盘块三个指针
最下面一层,叶子节点,硬盘存的数据
IO次数跟树的层级有关
如何保证层级:
首先磁盘块容量是固定的,数据所占容量越少,能存放的数据项越多
层级越低,故我们需要对表中占硬盘容量越小的字段作为索引
聚集索引:
特点:叶子节点存放的是一整条数据,只有主键字段才能成为聚集索引,以主键查找速度快
辅助索引(unique,index)
特点:如果按照name字段创建索引,那么叶子节点存放的是{name:name所在那条记录的主键的值}
如果未找到我们想要的数据,我们在辅助索引的叶子节点中找到了记录的id,会通过id再次查找我们想要的数据,叫做回表
联合索引
索引的最左匹配,先从左面开始匹配
create idex idx_all on s1(email,name,gender,id);
只要查询中含有email的都可以命中,加速查询
将区分度高的往左放,范围查询往最后放
索引的添加:
在没有数据时添加索引是很快的,在数据已经保存好时,添加索引很慢
因为它要扫描所有数据添加索引
索引并不是越多越好:
写入时,会重新创建索引,硬盘疯转,磁盘IO高
正确使用索引:
创建索引的方式
create table t1(
id int,
name char,
unique key uni_id(id),
index ix_name(name) #index没有key
);
create index ix_age on t1(age);
alter table t1 add index ix_sex(sex);
查看索引
show create table t1;
删除索引:
drop index 索引名 on 表名 ;
标签:记录 问题 参与 sam 模糊 gen rop 比例 表数据
原文地址:https://www.cnblogs.com/robert-zhou/p/10263328.html