今天,同事写了一个很大个的SQL,总共有五百多行,在89万条数据的表里运行一次需要1分钟多,头提出要求,说要调整这条SQL到三秒钟以内。查看了一下执行计划,仅执行几乎就有100多行。根据执行计划,可以看到,他把一个表访问了近20次,虽然物理IO不高,但是逻辑IO很高,这样的查询效率自然不会高。查看他的代码,select week from table1 where yw between v1 and v2,这种语句被翻来覆去写了至少10遍,然后再用week作为条件,在外层查询里使用谓词in来访问那个有89万条记录的表。于是建议他将所有条件合并在一起,然后用case来做标识。调整后的SQL在10秒以内就可以返回结果集了。
没有评论:
发表评论