日期:2014-05-17  浏览次数:20444 次

SQL添加order by后性能非常慢(也有可能是查询条件)!求高手帮忙优化下。。。
SELECT TOP 50 * FROM vw_App_Appointment WHERE 1 = 1 AND user_department_id = 1000 ORDER BY appointment_id DESC
此句代码时候后,执行时间非常慢,大于需要40多S。
  
SELECT TOP 50 * FROM vw_App_Appointment WHERE 1 = 1 AND user_department_id = 1000
SELECT TOP 50 * FROM vw_App_Appointment ORDER BY appointment_id DESC
而当这两句分别执行时候,大约也就1S左右。
 
为什么性能会相差这么多呢?该怎么优化第一句SQL?
优化 sql

------解决方案--------------------
引用:
呃。。。
如9楼所说,为表Acc_User表添加了覆盖索引,就好了,但是不知道原理是为什么。。。


因为利用原索引找到USER_ID 的时候,还需要找到user_real_name,但索引中没有,就得全表扫描一下。
建个覆盖索引,就不用再扫描全表,速度就上来了。