我有幾個運行頻繁的複雜查詢。 高速緩存結果是不可能的,因爲它們大部分時間都在更新,並且看到更新的數據是整個點。複雜查詢的存儲過程
我不允許更改數據庫設置,除非地獄先凍結,否則那些人不會這樣做,所以我必須盡我所能優化查詢和表格。
因爲我認爲我已經盡了所有這些查詢和他們使用的表格,所以我想如果我爲它們創建存儲過程,速度是否會有所提高。
它會增加速度,還是應該尋找別的東西?
我有幾個運行頻繁的複雜查詢。 高速緩存結果是不可能的,因爲它們大部分時間都在更新,並且看到更新的數據是整個點。複雜查詢的存儲過程
我不允許更改數據庫設置,除非地獄先凍結,否則那些人不會這樣做,所以我必須盡我所能優化查詢和表格。
因爲我認爲我已經盡了所有這些查詢和他們使用的表格,所以我想如果我爲它們創建存儲過程,速度是否會有所提高。
它會增加速度,還是應該尋找別的東西?
我希望我早點發現了這個問題。無論如何,它回答了我是否應該使用SP的問題,似乎答案是「否」,因爲性能增益會非常小。 – Carlos 2010-11-19 18:15:19
不,使用存儲過程不會增加「硬」查詢的性能。
大多數情況下,硬查詢是由數據庫需要做大量工作才能找到答案造成的。如果它在存儲過程中,這不會有什麼不同。
更改數據庫設置可能會影響某些內容,但通常優化查詢的最佳方式是更改數據結構,以便您需要查詢更少的行或更少的列。或者,您可能可以使用更好的索引或改進查詢的其他方式。
使用說明。使用非生產系統進行性能測試。不要費心把你的疑問放到一個程序中(如果性能是你想要這樣做的唯一原因)。
我已經做了所有的事情,並且在性能方面取得了巨大的進步。然後,隨着桌子的不斷增長,事情再次減慢。 – Carlos 2010-11-19 17:25:24
您是否認爲出於性能目的對數據庫進行反規範化也是合理的?這通常會降低查詢的複雜度,但可能會增加插入/更新數據所需的時間。但看起來這些成本可能會攤銷,因爲INSERT和UPDATE通常在較長時間內以較小的塊執行。 – 2010-11-19 17:36:34
已經做了一些反規範化。它大大縮短了我的一些最慢的查詢所花費的時間。或者,也許我設計的表很差,這不會讓我感到意外,因爲我從來沒有使用過可能達到成千上萬行的表,並且需要與其他表一樣大的表。 – Carlos 2010-11-19 17:47:09
是的。使用存儲過程將會提高性能。由於SP被編譯並存儲在數據庫服務器中。
但是這也取決於表的結構和查詢!
隨着數據的增長,如果您的數據庫結構較差且未優化查詢,性能將會很低。
怎麼樣設置一個視圖... – Webnet 2010-11-19 17:22:08
我曾經想過幾次,但我記得在某處讀到mysql沒有編譯用於視圖的查詢,所以它只能讓代碼看起來更漂亮,所以我沒有打擾到意見。或者我的信息錯了? – Carlos 2010-11-19 17:30:10