今天无聊拿以前的sql测试了一下性能。两种不同实现的sql,也就是A用union all拼接的,B也是union all,但是用with as把公用的部分提取了。然后看了一下执行计划,b的cost在100w+,a的cost在一二十多万吧,但是b的速度零点几秒,a在1秒多。百度了一波,先说结论:统计信息过旧。
当前用户下的统计信息各种都是激活的,可用的,但是不知道为什么统计信息没更新。我那句sql用到的都是别的用户下的表,所以切换用户,重新手动统计了一下信息,最后看看统计计划,b的cost在几百,a在几万,然后b的查询速度比a高一倍。