簡體   English   中英

Oracle SQL-避免全表掃描(在哪里)

[英]Oracle SQL - Avoid full table scan (where)

我有一條聲明(簡單來說,我們可以這樣看:)

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

該視圖使用多個表-例如,表X,Y,Z,目標將在X中。該視圖返回20億行的數據集,通過該查詢,數據庫將加載所有表並搜索目標等於' α'。 現在有可能使此查詢更快嗎?

也許有可能使加載的視圖更小(?),我認為當我可以在視圖內制作'target ='alpha'語句時,然后視圖會更小,這確實很有幫助。但是,我認為當我在視圖中執行此語句時,問題將是相同的,因為然后視圖將執行相同的操作(對嗎?)

最后,最好是保留原樣的視圖並在新語句中進行工作,但是如果有人在我更改視圖時有可行的想法,也可以這樣做。

謝謝!

視圖是存儲的SQL語句,要使視圖更快,您必須使存儲的SQL語句更快。

SQL語句取決於表,並可以加快對使用index的表的查詢速度。 使用索引的好處很多,請在此處閱讀SO問題的絕佳答案。 它解釋了什么是索引,如何工作以及為什么需要索引。

因此,為防止全表掃描,您可以添加索引以加快查詢速度。 在您的情況下,您需要確定SQL語句中最適合索引的列。 通常,WHERE,ORDER BY,JOIN和GROUP BY子句中常用的列非常適合包含在索引中。 在您的情況下,開始查看目標列所在的表。 首先在此處添加索引,然后繼續其與查詢中其他表的關系。 使用視圖時,這最終將導致更快的響應時間。

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

暫無
暫無

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

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