下面的問題請高手幫忙分析下可能是什么原因,或有遇到過的幫忙回答下:
SQL SERVER中的表,表中每月有600萬條左右的記錄,從2019年1月1日開始的。
最近感覺查詢速度比較慢,故做了如下測驗:
用SQL:select top 1000 * from 表名,速度很快;
用SQL:select top 1000 * from 表名 where 文本欄位 like 'B%',速度很快;
用SQL:select top 1000 * from 表名 where 日期>'2019-1-1',速度很快;
這個日期條件一直測到'2019-3-1'都很快,然后從'2019-4-1'開始,速度奇慢:
'2019-4-1' ,耗時34秒;
'2019-5-1' ,耗時46秒;
'2019-6-1' ,耗時45秒;
'2019-7-1' ,耗時45秒;
'2019-8-1' ,耗時45秒;
最神奇的是,到了'2020-8-1' ,耗時竟然達到了5分鐘!!
日期欄位有一個非聚集的索引,我以為索引出了什么問題,所以刪了索引重建,結果依舊。
掃描了一下日期欄位的索引碎片,沒發現什么問題:
已執行 LEAF 級別的掃描。
- 掃描頁數................................: 198918
- 掃描區數..............................: 24865
- 區切換次數..............................: 24864
- 每個區的平均頁數........................: 8.0
- 掃描密度 [最佳計數:實際計數].......: 100.00% [24865:24865]
- 邏輯掃描碎片 ..................: 0.00%
- 區掃描碎片 ..................: 0.14%
- 每頁的平均可用位元組數.....................: 11.0
- 平均頁密度(滿).....................: 99.86%
uj5u.com熱心網友回復:
select top 1000 *
from 表名
where 日期>'2019-4-1'
ORDER BY 日期 ASC
加上排序了再試下呢?
如果還慢, 看一下執行計劃。把執行計劃的截圖貼出來。
uj5u.com熱心網友回復:
加了排序一樣,不過我換了個思路,把日期欄位的索引設為聚集型別,速度一下快了哈。謝謝!uj5u.com熱心網友回復:
TOP一直有這個資料分布的問題,你換個row_number寫法就解決了uj5u.com熱心網友回復:
看一下執行計劃uj5u.com熱心網友回復:
請問你說的“換個row_number”寫法就解決了,是什么意思?
uj5u.com熱心網友回復:
用分析函式row_number改寫top,你可以嘗試下看看轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/8408.html
標籤:疑難問題
上一篇:sol資料庫匯入EXCEL時報錯
