本文学习自阿里巴巴编码规范,只作为学习笔记,如需详细了解请自行查看阿里编码规范
1.业务上具有唯一特性的字段,哪怕是多个字段的组合,也必须要建成唯一索引。
2.需要join的字段,数据类型必须绝对一致,多表关联查询时,保证被关联到的表需要有索引。
即使双表 join 也要注意表索引、SQL 性能
3.在varchar字段上建索引时,必须设置索引的长度,根据实际文本区分度解决实际索引长度。
测试合适索引的长度
计算公式是:count(distinct left(c_address,20))/count(*)
当前字符串出现的数量/总量的一个比例,比例在95%左右最合适的。
4.页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决
索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。
5.如果有 order by 的场景,请注意利用索引的有序性。order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现 file_sort 的情况,影响查询性能。
什么是file_sort
可以理解为外部排序,就是把select的数据,按照order by的列 ,在内存中进行一次排序,然后返回结果。
注意:索引中有范围查找,那么索引有序性无法利用,如:WHERE a>10 ORDER BY b; 索引a_b 无法排序。
6.建组合索引的时候,区分度最高的在最左边。
如果 where a=? and b=? ,a 列的几乎接近于唯一值,那么只需要单建 idx_a 索引即可。
说明:存在非等号和等号混合判断条件时,在建索引时,请把等号条件的列前置。如:where a>? and b=? 那么即使 a 的区分度更高,也必须把 b 放在索引的最前列。