今天在生产环境中发现一条sql语句尽管走了主键索引,但是查询还是很慢。
sql语句类似下面的形式:
查看该sql的执行计划
发现有严重的io问题,瓶颈就在于使用的primary key对应的index
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLwUDNiRDNmZTYycTYyATY1kDZzEDMzUTN2IzMlFGNjFDZlFDO3MTZl9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
这个问题很值得深究,完全可以使用如下的方式来验证。我尝试使用pk的Hint,另外不加任何hint,看表查询的时候会不会使用index
启用了index range scan,而且从执行计划和统计信息来看,明显要比全索引扫描效率高得多。
可以看到使用index range scan之后,先查询了索引列的信息,然后无法走索引过滤了其他的条件。根据目前的数据情况,这个效率要比全索引效率还高的多。
以下是做了hint的改动之后,统计信息的情况,可以看到明显的改善。对于这个Hint的细节需要和客户做更多的确认,毕竟对于调优不能越调越差,稳定和高效才是关键。