2011-02-03 20 views
19

我正在創建一個表格,它將突出顯示符合特定條件的數據。例如,如果我有一個具有整數值的表,我希望我的視圖顯示具有大於100的值的行。我知道如何通過在表上創建視圖來實現此目的,但視圖是動態的嗎?我已經在MySQL中測試過了,它似乎是真的。但是如果我的桌子有超過1000行,這是否有效?該視圖是否仍會「動態」更新原始表中的任何更改?MySql Views是否動態且高效?

+0

請參閱http://stackoverflow.com/q/7922675/632951 – Pacerier 2014-10-26 02:33:27

回答

23

基本上,MySQL中基本上有2 types of views

  1. 合併視圖

    這種類型的觀點基本上只是與視圖的SQL重新寫你的查詢。所以這對於自己編寫查詢是一個短暫的手段。這不會提供真正的性能優勢,但可以使複雜查詢變得更輕鬆,並使維護變得更加輕鬆(因爲如果視圖定義更改,則不需要針對視圖更改100個查詢,而只需定義一個)。

  2. 不是Temptable查看

    這種類型的視圖創建臨時表與視圖的SQL查詢。它具有合併視圖的所有優點,但也減少了視圖表上的鎖定時間。因此,在高負載的服務器上,它可能會有相當顯着的性能增益。

還有「未定義」視圖類型(默認值),這讓我們的MySQL挑它認爲在查詢時的最佳類型...

但需要注意的一些需要注意的重要的是, MySQL不支持materialized views。所以它不像甲骨文那樣複雜的觀點會顯着增加查詢的性能。視圖的查詢總是在MySQL中執行。

就效率而言,MySQL中的視圖不會增加或降低效率。在編寫和維護查詢時,它們可以讓您的生活更輕鬆。我已經在有數億行的表上使用了視圖,並且它們工作得很好......

+0

好的,這是有道理的。感謝ircmaxell! – Santiago 2011-02-03 14:39:11

9

mysql不會在臨時表上使用索引...所以它會嚴重影響您的性能。