2016-07-06 38 views
0

我有一個聲明(簡單,我們可以看到這樣的:)的Oracle SQL - 避免全表掃描(如果)

Select * from VIEW where View.target='alpha' 

視圖是使用多個表 - 表X,Y,Z例如,目標將在X中。該視圖返回一個包含20億行的數據集,通過該查詢,數據庫將加載所有這些數據集並搜索目標等於'alpha'的位置。現在有沒有可能使這個查詢更快?

也許有可能使視圖從中加載一點點(?)我認爲當我可以在視圖中使'target ='alpha'語句變小時,視圖會變小真正幫助......但我想,當我在視圖中做此聲明的問題是相同的,因爲這樣的觀點會做同樣的(我說得對不對?)

在結束這將是更好的時候纔能有現實的觀點並且在新的陳述中做這項工作,但是如果有人在改變視圖的時候會有一個想法,那麼這也可以完成。

謝謝!

+0

查詢執行的優化是爲什麼數據庫管理員存在的理由之一。你的問題太籠統了。如果不知道所有表的背後,它們的統計數據,索引和索引統計信息,針對它們發出的查詢的類型,它們如何填充,更改或分區等,則無法進行優化。詢問你的DBA。他有知識去做。如果您想了解如何做到這一點,你就可以開始在這裏https://docs.oracle.com/cd/E11882_01/server.112/e41573/perf_overview.htm#PFGRF94083 – Mottor

+0

http://tkyte.blogspot.de/ 2005/06/how-to-ask-questions.html –

回答

2

視圖是存儲在SQL語句,並作出更快的觀點,你將不得不作出存儲的SQL語句更快。

該SQL語句依賴於表並加快查詢您使用的表索引。索引的好處很多,閱讀SO這個很好的答案。它解釋了什麼是索引,它是如何工作的以及爲什麼需要索引。

所以防止了全表掃描你添加索引,使查詢速度更快。在你的情況下,你需要確定SQL語句中適合索引的列。通常在WHERE,ORDER BY,JOIN和GROUP BY子句中使用的列很適合包含在索引中。 就你而言,開始查看目標列所在的表。首先在那裏添加一個索引,然後繼續與查詢中其他表的關係。這將最終在使用視圖時縮短響應時間。

在您的Oracle表上創建索引。閱讀Oracle文檔here

+0

我可以在View上使用索引嗎? 該視圖使用多個表來創建,(例如表x,y,z)目標將在x中,當我使用表x目標上的索引時它會有幫助嗎?或者這會有沒有影響? 預先感謝您! –

+0

視圖是存儲的SQL語句,您不能在其上創建索引。 創建視圖的基礎表上的索引來提高的觀點 –

+0

性能如果你加入的觀點很多表,看錶之間的連接列和創建索引,其中包括對每個表中的列。那麼這個視圖的表現會更快,因爲連接將使用索引。 –