日期:2014-05-18  浏览次数:20453 次

SQL的速度为什么这么慢??
各位大虾:应用中需要把原来表中的数据清理一下。
于是写了如下的SQL语句。但速度超过,数据量大约20万条。已经等了1个多小时,实在受不了啦,
请问各位大虾,有何提高执行速度的方法。

delete   from   wlk
where   wlk.ID <
(select   b.id   from   wlk   b
  where   wlk.luhao   like   b.luhao)

为什么这么慢呢。
已在表WLK中建立了IX_LUHAO的索引。



------解决方案--------------------
楼主的意思是想把每个luhao对应的最大的id过滤掉还是?
------解决方案--------------------
楼主分开执行试一下,先查出id,然后再删除小于此id的数据,like很影响速度~~
------解决方案--------------------
樓主你這樣的寫法叫做重復利用子查詢了:
建議樓主行首先在表的兩個欄位(luhao,id)上建立索引,然後用以下語句進行刪除:
delete a
from wlk as a left join
(select luhao,max(id) as id from wlk 
group by luhao) as b on a.luhao = b.luhao and a.id = b.id
where b.luhao is null

其實寫法還有很多,比如:
delete a
from wlk as a
left join wlk as b on a.luhao = b.luhao and a.id <b.id
where b.luhao is not null

還有樓主你本身的寫法也是一種,只是大家執行的效率不一樣。要選擇一條效率比較高的,樓主行可以看看每條語句的執行計劃,如果你理解了執行計劃,那麼你在寫語句的時候就可以知道怎麼樣的語句會更有效率,還有就是索引的建立要和你的實際情況相關連,如果樓主行經常對該表進行這個操作,很好有其它動作的話,我建議建立索引(luhao,id),如果還有其它動作,那就要再討論了。