SQL索引优化

1.最左前缀法则

带头大哥不能少,中间兄弟不能断,索引列上不计算,范围右边全失效,like百分加右边,索引覆盖会更好,字符类型单引号.

2.MYsql' 查询优化器会自动按找复合索引顺序帮我们调整where 条件中的顺序.

3.索引有两个功能,查询,和排序; 索引中断后 后续索引无法用于查询,但是可以排序;

4.分组之前必排序

5.小表驱动大表

 in 里边的数据越少越好;exists外表的数据越少越好

6.filesort 文件内排序;

有两种算法;4.*之前是双路排序(先按照order by 的列查询出数据在sort_buffer中排序,之后按照buffer中的列去磁盘读取所有列的数据,总共两此扫面)

单路排序(先取出所有字段数据,在sort_buffer中排序,输出)如果sort_buffer过小,那么将进行多次磁盘I/O

max_length_for_sort_data 数据库配置参数:如果order by的列字节大于这个数值,就会转换成双路排序,不然会进行多次单路排序,反而得不偿失;

sort_buffer_size :缓存区大小,无论双路,单路都会提高效率,但是要根据服务器配置进行调整;

varchar 列的最大长度是 max_length_for_sort_data规定的值,而不是排序数据的实际大小(5.7.x 版本中对排序做了优化,分配排序缓冲时针对变长列可以根据数据实际占用的大小来分配内存)。

7.group by 之前会进行order by 根据排序,进行分组 

 

posted @ 2020-09-16 16:43  不知无畏  阅读(175)  评论(0)    收藏  举报