簡體   English   中英

如何性能調優對日期范圍具有Between語句的查詢

[英]How to Performance tune a query that has Between statement for range of dates

我正在對所有運行緩慢的查詢進行性能優化。 我是Oracle新手,已經使用sql server已有一段時間了。 有人可以幫助我調整查詢以使其運行更快。

Select distinct x.a,  x.b from 
from xyz_view x 
where x.date_key between 20101231 AND 20160430

感謝任何幫助或建議

首先,我將首先查看為什么有DISTINCT 以我的經驗,許多開發人員選擇DISTINCT是因為他們知道他們需要獨特的結果,但實際上並不清楚他們為什么還沒有得到結果。

其次, 對於該特定查詢 ,該列上的聚集索引將是理想的選擇因為它將所有行緊挨着放置在磁盤上,並且服務器可以一次抓取所有這些行。 問題是,這可能無法實現,因為您已經擁有一個適合其他用途的聚集索引。 在這種情況下,請嘗試在date列上使用非聚集索引,然后看看能做什么。

請記住,索引具有廣泛的作用,因此使用單個查詢來確定索引不是一個好主意。

我還要補充一點,如果您要從視圖中拉出,則應該真正研究視圖的設計。 它通常具有很多聯接,這些聯接對於查詢來說可能不是必需的。 另外,如果需要該視圖,則可以查看創建索引視圖的過程,這可能非常快。

只要您已經確定確實需要DISTINCT就可以做很多事情來優化此查詢。

如果讀取未提交的頁面不是問題,則可以在FROM子句中添加[NOLOCK]

但是,您可以分析是否也插入了時間,如果確實如此,那么它是否確實相關,如果不將時間設置為午夜,則會改善索引。

我見過的最大改進是將表中的日期字段分為3個字段,每個日期部分1個。 這確實可以提高性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM