2013-05-10 97 views
1

我們有查看錶並從視圖中選擇通常需要太多時間。例如: :select x,y,z from view1加載時間過長。這個是好的。查詢視圖佔用太多時間

如果你查詢:select x,y,z from view1 where x in ('abc')查詢在幾秒鐘內。

如果您在幾秒鐘內查詢:select x,y,z from view1 where x in (select 'abc' from table1 where y='1234')查詢。

但是如果你查詢: select x,y,z from view1 where x in (select x from table1 where y='1234')正在採取太多的時間來查詢,這是我們要解決的問題。

通過你能想到的方式:select x from table1 where y='1234' 回報'abc'與一行。

這個場景在上面進行了分析, 你認爲這可能是花費這麼多時間來查詢第三個查詢的原因。 我們嘗試加入,但沒有奏效。

+0

你在你的最後一句話的意思是,「它不工作」?你有錯誤嗎?你沒有得到所需的結果嗎?是否只要您現有的查詢(或更長)?你能發表你的觀點的定義嗎? table1已經在使用了嗎?通常會從表1中選擇多少個不同的x值,其中y ='1234'?你使用的表格有哪些索引?哪個RDBMS(SQLServer,Oracle,MySQL等)是這樣的? – 2013-05-10 07:41:48

回答

2
  • 視圖是不是有些神奇的一段時間可以節省代碼
  • 視圖是擴展宏:無多,不會少

所以,如果您的視圖有5桌和4的JOIN ,這些將每評估

所以,我的問題應該是:

是否有在視圖中生成列X的一些基本表的基礎上欄適合索引?

至於你的最後一個SQL,你要爲視圖內容添加一個額外的IN子句和子查詢。
請注意,你可能知道只有一行返回,但優化器可能不會因爲或貧窮或過時的統計數據,和/或壞的索引

我的下一個問題

是否table1中具有良好的索引滿足子查詢的效率?

不管怎樣,看着查詢計劃將幫助你找出什麼錯誤

+0

感謝您的回覆,我相信它與優化器行爲有關,因爲我們嘗試了幾乎所有可能的查詢方法。 – 2013-05-10 08:19:32

+0

優化器是相當可預測的:但使用視圖並且沒有索引限制了它的選項 – gbn 2013-05-10 09:10:57