索引
day 49
索引
元类
元类
什么叫索引?
搜索
主键
外键
index
为了加速查询
有序的
数据量小的字段
最左匹配原则
聚集索引
辅助索引
覆盖索引
回表
主键加索引
先建索引再加数据
条件中有索引匹配上,命中索引
无论索引如何设计,无法范围查询
创建索引语句:
创建索引很慢
create index name_index on usr (name);
索引不应当加在值重复度很高的地方。正确使用姿势,应该加在重复度低的地方
模糊匹配
62122 6100 1019 068 516
----------------------------------------------------------------------------------------------------------
索引
读多写少
select * from emp where 条件;
针对数据的优化:
精准定位要找的数据,提升查询效率
select id ,name from emp where id = 2;
精准定位要找的数据,提升查询效率
select id ,name from emp where id = 2;
书的目录功能
火车票
门牌号
索引在mysql中也叫做键,是存储引擎用于快速找到记录的一种数据结构。
加速查询
主键
primary key
除了有索引功能还有约束功能
unique key
只有索引功能
index key
火车票
门牌号
索引在mysql中也叫做键,是存储引擎用于快速找到记录的一种数据结构。
加速查询
主键
primary key
除了有索引功能还有约束功能
unique key
只有索引功能
index key
怎么加索引?
对哪些字段加索引?
id字段可以加
占空间较小的字段
区分度高的字段
索引字段不要参与运算,索引字段就是一个明确的值
索引原理:
本质就是不断缩小想要获取数据的范围来筛选出最终想要的结果。减少查询次数,提高查询速度
磁盘io与预读
io延迟9ms
索引的数据结构
B+树结构
只有叶子结点才存放真正的数据,
select id ,name from emp where id = 2;
先读入id字段,根节点--->读到内存---->经过三次io找到
树的高度,索引的数越低越少
一个磁盘块的大小是固定的,应该对占内存数据量小的字段加索引,可以容纳更多的数据项
聚集索引
指的就是主键
innodb表 每个表指定个主键,一定要有一个字段建树形结构
聚集索引的特点:
他的每个叶子节点上会存放一整条记录
辅助索引
除了聚集索引之外的都叫辅助索引
特点是:
叶子结点只放这个值,以及这个值的主键id编号。
覆盖索引
在你的叶子结点找到你想要的值,就是你想查询的结果割你的条件是一致的
select age from emp where age = 30;
建一个索引的话速度会非常的慢,数据文件会比原来加大
回表 不如覆盖索引效率高
只有叶子结点才存放真正的数据,
select id ,name from emp where id = 2;
先读入id字段,根节点--->读到内存---->经过三次io找到
树的高度,索引的数越低越少
一个磁盘块的大小是固定的,应该对占内存数据量小的字段加索引,可以容纳更多的数据项
聚集索引
指的就是主键
innodb表 每个表指定个主键,一定要有一个字段建树形结构
聚集索引的特点:
他的每个叶子节点上会存放一整条记录
辅助索引
除了聚集索引之外的都叫辅助索引
特点是:
叶子结点只放这个值,以及这个值的主键id编号。
覆盖索引
在你的叶子结点找到你想要的值,就是你想查询的结果割你的条件是一致的
select age from emp where age = 30;
建一个索引的话速度会非常的慢,数据文件会比原来加大
回表 不如覆盖索引效率高
explain 查询优化神器
explain select * from s1 order by id limit 10;
创建索引
create index idx_id on s1(id);
创建一个索引,起一个名idx_id针对id的索引,on针对哪个表s1,针对s1的哪个字段(id)
创建一个索引,起一个名idx_id针对id的索引,on针对哪个表s1,针对s1的哪个字段(id)
删索引
drop index idx_id on s1;
drop index idx_id on s1;
怎么创建主键的索引表
alter table s1 add primary key(id);
删
alter table s1 drop primary key ;
alter table s1 drop primary key ;
跟范围有关系,有一个很大的范围,即使有索引也不会太快
>
<
!=
between and
>
<
!=
between and
like模糊查询
最左匹配原则
and 且
从左往右一个一个运行,有一个不成立就不成立
or 或
不是所有sql语句都可以优化的。