索引

索引

b+树

​ 平衡树(btree-balance tree) 能够让查找某一个值经历的查找速度尽量平衡
​ 分支节点不存储数据 -- 让树的高度尽量矮,让查找一个数据的效率尽量的稳定
​ 在所有叶子结点之间加入了双向的地址链接 -- 查找范围非常快

两种索引的差别
聚集索引 聚簇索引
Innodb 必有且仅有一个 :主键
非聚集(簇)索引 辅助索引

数据库使用的时候有什么注意事项
从搭建数据库的角度上来描述问题
建表的角度上
1.合理安排表关系
2.尽量把固定长度的字段放在前面
3.尽量使用char代替varchar
4.分表: 水平分,垂直分
使用sql语句的时候
1.尽量用where来约束数据范围到一个比较小的程度,比如说分页的时候
2.尽量使用连表查询而不是子查询
3.删除数据或者修改数据的时候尽量要用主键作为条件
4.合理的创建和使用索引
1.查询的条件字段不是索引字段
对哪一个字段创建了索引,就用这个字段做条件查询
2.在创建索引的时候应该对区分度比较大的列进行创建
1/10以下的重复率比较适合创建索引
3.范围
范围越大越慢
范围越小越快
like 'a%' 快
like '%a' 慢
4.条件列参与计算/使用函数
5.and和or
多个条件的组合,如果使用and连接
其中一列含有索引,都可以加快查找速度
如果使用or连接
必须所有的列都含有索引,才能加快查找速度
6.联合索引 : 最左前缀原则(必须带着最左边的列做条件,从出现范围开始整条索引失效)
(id,name,email)
select * from s1 where id = 1800000 and name = 'eva' and email = 'eva1800000@oldboy';
select * from s1 where id = 1800000 and name = 'eva';
select * from s1 where id = 1800000 and email = 'eva1800000@oldboy';
select * from s1 where id = 1800000;
select * from s1 where name = 'eva' and email = 'eva1800000@oldboy';
(email,id,name)
select * from s1 where id >10000 and email = 'eva1800000@oldboy';
7.条件中写出来的数据类型必须和定义的数据类型一致
select * from biao where name = 666 # 不一致
8.select的字段应该包含order by的字段
select name,age from 表 order by age; # 比较好
select name from 表 order by age; # 比较差

posted @ 2020-07-31 11:47  爱浪的跳蚤  阅读(82)  评论(0编辑  收藏  举报