大資料量下的資料庫日期操作問題

2021-04-18 02:42:23 字數 852 閱讀 8645

說明:以下資料庫操作基於sql server 2000

問題出現:

select top 50 newsid, newstitle, newsread from newstable where datediff("d", newstime, getdate())<7 order by newsread desc
只要對newsid,newsread,newstime都有索引,用查詢分析器分析成本發現成本非常小,在newstable資料量小的情況下,訪問速度非常快。可是最近發現,當newstable到達200萬條記錄的時候,這條看似簡單的語句執行居然要1分鐘以上。

解決問題:

這個問題排查比較簡單,去掉order by一樣很慢,只能斷定是datediff造成的。我們嘗試把上面的語句分成2段:

第一條語句:select min(newsid) from newstable where datediff("d", newstime, getdate())<7

第二條語句:select top 50 newsid, newstitle, newsread from newstable where newsid>[minid] order by newsread desc

其中[minid]是第一條語句的結果,我們發現:第二條語句執行非常快,關鍵是第一條慢。newsid和newstime均有索引,這是為什麼呢?

換乙個思路,第一條語句基本等價為

第三條語句:select max(newsid) from newstable where datediff("d", newstime, getdate())>=7

SQL Tips 大資料量下的資料庫日期操作問題

說明 以下資料庫操作基於sql server 2000 問題出現 select top 50 newsid,newstitle,newsread from newstable where datediff d newstime,getdate 7 order by newsread desc只要對n...

大資料量下的分頁

大資料量下的分頁 郭紅俊 select from orders where orderid between 10248 and 10253 select from orders where orderid in 10248,10249,10250,10251,10252,10253 order by...

大資料量下的sort

sort在linux命令列下面是乙個非常好用的工具,有人把它當做每個程式設計師都應該知道的8個linux命令之一,最近在處理大資料的時候發現兩點。1.用sort u 而不是sort uniq。sort應該是按照歸併的思想來的,先分成乙個個小檔案,排序後再組合成最後拍好序的檔案。所以,sort u 要...