1.select * from user_info a where user_no = 59027 连续出现大量慢查询
user_info 表中 字段user_no 建立了索引,而且索引的区分度很高,一直报慢查询,查看执行计划发现一直不走索引。
原因:user_info 表中的user_no 为varchar类型,但是查询条件中是数值型,这种情况下会导致索引失效,将语句修改为:
select * from user_info a where a.user_no = '59027',索引使用正常了。
一点技巧:无论字段是int,varchar,查询条件中的值都加上单引号,当做字符串处理即可。也就是值是字符串是可以走索引的,如果值是数值型,类型不对时不走索引。
总有想不到的地方,多学多问。
2.索引区分度计算常用方法
select count(distinct user_no)/count(1) from user_info;
user_no 是索引字段,一般区分度达到0.1就可以接受,如果是联合索引,重点第一字段的区分度。