索引使用B+tree
innbd使用聚簇索引,只有主键使用,数据与索引在一起
其他索引为辅助索引,非聚合索引,索引存放的是主键索引
使用explan 判断索引是否失效
索引原则:
1,最左前缀
2,组合索引,查询右边的索引,不生效,如需要单独生成索引
3,索引进行函数运算失效
4,字符串不加单引号,索引失效
5,使用or时,如有一列没有索引,所有索引失效
6,以%开头的like模糊查询,索引失效
7,如mysql评估使用索引比全表慢,索引失效,数据较少时,使用索引
8,is null, is not null 有时索引失效,数据少时,使用索引,数据多时索引失效
9,in , not in 有时索引失效,数据少时,使用索引
索引使用原则:
1,针对查询频次高,且数据量大的表简历索引
2,索引字段的选择,最佳应当从where子句中提取,如果where子句中的组合笔记多,挑选最常用,过滤效果最好的组合
3,使用唯一索引,区分度越高,索引效率越高
4,索引不是越多越好,索引多会导致更新删除等dml操作变慢
5,使用短索引,索引创建后也需要使用硬盘存储,如果构成索引字段比较短,那么在给定空间可以存储更多索引值信息
6,利用最左前缀,n个列组合索引,相当于创建了n个索引,如果where子句中使用了组成该索引的前几个字段,那么这个查询可以利用组合索引提升查询效率
常用sql优化:
order by 优化:
explain extra排序类型:filesort, index
index: 索引排序,索引覆盖时
filesort:额外文件排序,额外排序时使用的是缓存区,修改sort_buffer_size 缓存区大小,可以加快查询速度,show variables like '%sort_buffer_size %', 显示缓存区配置
group by优化:
如使用explain 查询发现,extra内包含 using file sort ,在group by 后追加 order by null,禁用分组排序
limit 优化:
用id作为主键排序,分页查询,后拿id记录去回查表
count 优化: