一条SQL语句变得巨慢的原因及其解决方法 |
|||
景象:一条SQL蓦地运行的特殊慢 。
出错缘由:消费者添加了一个条件member.site=test,造成衔接的顺序 变迁了,原来的驱动表是uidTable(最多1024条记录),现在变成了member表做驱动(600W条) 。所以这条语句变的巨慢 。
然而既然是外衔接,为何衔接的顺序会转变呢?由于外衔接的衔接顺序不是由COST决定的,而是由衔接的条件决定的 。发现执行 方案如下:
为何 根本就没有执行外衔接呢?问题出在member.site='test'这个条件上,由于对外衔接的表加了条件,造成外衔接失效 。改为member.site(+)='test'后,问题彻底解决 。
|