索引

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;
 
书的目录功能
火车票
门牌号
 
 索引在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;
 
建一个索引的话速度会非常的慢,数据文件会比原来加大 
  
 回表 不如覆盖索引效率高
 

explain 查询优化神器
explain select * from s1 order by id limit 10;
创建索引
create index  idx_id on s1(id);
创建一个索引,起一个名idx_id针对id的索引,on针对哪个表s1,针对s1的哪个字段(id)
删索引
drop index idx_id on s1;
 
怎么创建主键的索引表
alter table s1 add primary key(id);

alter table s1 drop primary key ;
 
 
跟范围有关系,有一个很大的范围,即使有索引也不会太快
>
<
!=
between and
like模糊查询
 
 
最左匹配原则
 

and 且
从左往右一个一个运行,有一个不成立就不成立
or 或
 
 
 
 
不是所有sql语句都可以优化的。
 
 
 
 
原文地址:https://www.cnblogs.com/zhangrenguo/p/10027538.html