sql優化(查詢大資料量時sql執行時間過長)
阿新 • • 發佈:2019-01-14
問題:Oracle資料庫 sql查詢的優化(成交額統計表的sql查詢時間過長進行的優化)
解決辦法:對sql語句中使用檢視的部分替換為子查詢,對查詢表條件欄位建立索引
引發的問題:在什麼情況下建立索引,及建立索引後引發的開銷有哪些
經查詢oracle的索引機制,摘錄如下:
索引可以提高資料查詢的效率,並不僅僅在於資料庫會自動按照順序進行搜尋。另一個重要的方面是索引的按塊維護策略。一本字典的目錄,不僅僅將漢字按照字母表順序進行排列,而且對其進行了分塊處理。例如,一個目錄可能的儲存結構如圖18-8所示。
使用者在使用字典時,會首先分析目標字的開頭字母,例如,漢字"查",首字母為C,那麼使用者不會從第一個生字"啊"順序向下查詢;而是直接跳轉到C塊,然後從C塊的第一個漢字"才"進行順序查詢。索引使用了同樣的思想,當然,具體的分塊策略要複雜得多。
但是,這引起了另外一個問題--維護字典的成本較高。因為字典目錄所要維護的漢字索引較多,那麼肯定會分為多頁。第一次建立字典目錄之後,各條目都會佔據某頁上的一行。現在設想向其中加入新的漢字"白",那麼"白"應該處於"吧"與"包"之間。為了完成這一工作,則必須破壞"吧"之後的所有目錄的位置及所在頁--將其後所有目錄條目後移,處於分頁臨界處的條目也需要進行換頁。
由此推論oracle的索引並不是適合所有的情況,追求查詢與插入錶速度之間的平衡時一定不能多建索引,要有充分的考慮和評估。當一個表中的資料大部分的作用的是用來查詢的話,對其更新和插入操作過少的話,這個時候在優化查詢的時候就可以考慮對其增加索引;當一個表會被頻繁的插入,更新的話,慎重對其增加索引,這會增加資料插入時的開銷
.
