2010-11-19 96 views
2

我有幾個運行頻繁的複雜查詢。 高速緩存結果是不可能的,因爲它們大部分時間都在更新,並且看到更新的數據是整個點。複雜查詢的存儲過程

我不允許更改數據庫設置,除非地獄先凍結,否則那些人不會這樣做,所以我必須盡我所能優化查詢和表格。

因爲我認爲我已經盡了所有這些查詢和他們使用的表格,所以我想如果我爲它們創建存儲過程,速度是否會有所提高。

它會增加速度,還是應該尋找別的東西?

+0

怎麼樣設置一個視圖... – Webnet 2010-11-19 17:22:08

+0

我曾經想過幾次,但我記得在某處讀到mysql沒有編譯用於視圖的查詢,所以它只能讓代碼看起來更漂亮,所以我沒有打擾到意見。或者我的信息錯了? – Carlos 2010-11-19 17:30:10

回答

0

請參考以下鏈接

MySQL Stored Procedure vs. complex query

它會給你小的性能提升。

+0

我希望我早點發現了這個問題。無論如何,它回答了我是否應該使用SP的問題,似乎答案是「否」,因爲性能增益會非常小。 – Carlos 2010-11-19 18:15:19

2

不,使用存儲過程不會增加「硬」查詢的性能。

大多數情況下,硬查詢是由數據庫需要做大量工作才能找到答案造成的。如果它在存儲過程中,這不會有什麼不同。

更改數據庫設置可能會影響某些內容,但通常優化查詢的最佳方式是更改數據結構,以便您需要查詢更少的行或更少的列。或者,您可能可以使用更好的索引或改進查詢的其他方式。

使用說明。使用非生產系統進行性能測試。不要費心把你的疑問放到一個程序中(如果性能是你想要這樣做的唯一原因)。

+0

我已經做了所有的事情,並且在性能方面取得了巨大的進步。然後,隨着桌子的不斷增長,事情再次減慢。 – Carlos 2010-11-19 17:25:24

+0

您是否認爲出於性能目的對數據庫進行反規範化也是合理的?這通常會降低查詢的複雜度,但可能會增加插入/更新數據所需的時間。但看起來這些成本可能會攤銷,因爲INSERT和UPDATE通常在較長時間內以較小的塊執行。 – 2010-11-19 17:36:34

+0

已經做了一些反規範化。它大大縮短了我的一些最慢的查詢所花費的時間。或者,也許我設計的表很差,這不會讓我感到意外,因爲我從來沒有使用過可能達到成千上萬行的表,並且需要與其他表一樣大的表。 – Carlos 2010-11-19 17:47:09

0

是的。使用存儲過程將會提高性能。由於SP被編譯並存儲在數據庫服務器中。

但是這也取決於表的結構和查詢!

隨着數據的增長,如果您的數據庫結構較差且未優化查詢,性能將會很低。

+0

你能否提供這方面的證據,因爲我不是100%確定這是正確的。 – Rippo 2010-11-19 17:23:26

+0

請參閱下面的鏈接 - 存儲過程和執行計劃 http://msdn.microsoft.com/en-us/library/aa174792%28SQL.80%29.asp – Lamps 2010-11-19 17:33:16

+0

「未找到內容」。另外,如果它在msn上,是不是關於SQLServer? – Carlos 2010-11-19 17:36:40