我目前正在編寫我真正的第一個PHP應用程序,我想知道如何正確地項目/設計/實現MySQL視圖;在MySQL中反觀性能非規範化
在我的特殊情況下的用戶數據分佈在多臺分散(如數據庫規範化的結果),我想使用視圖對數據進行分組到一個大表:
CREATE VIEW `Users_Merged` (
name,
surname,
email,
phone,
role
) AS (
SELECT name, surname, email, phone, 'Customer'
FROM `Customer`
)
UNION (
SELECT name, surname, email, tel, 'Admin'
FROM `Administrator`
)
UNION (
SELECT name, surname, email, tel, 'Manager'
FROM `manager`
);
這樣我可以使用PHP應用程序中的視圖數據很容易,但我不知道這會影響性能。
例如:
SELECT * from `Users_Merged` WHERE role = 'Admin';
是過濾視圖的數據以正確的方式或者我應該過濾器之前創建視圖本身? (我需要這個用戶列表以及按角色過濾它們的功能)。
編輯
具體是什麼我想要考取的是三個表的非規範化爲一體。我的解決方案正確嗎? See Denormalization on wikipedia
是的,用戶角色是由設計脫節;事實是角色列只存在於這個視圖中(我需要這個列進行過濾),我該如何索引它?我不確定這一點,但可以在MySQL中的視圖有索引? – 2010-03-15 16:16:43
MySQL將使用TABLE上的索引來進行選擇。一般來說,嘗試去思考你的DBMS是一個錯誤。這些東西在引擎蓋下非常複雜,所有簡單的情況都已經過優化。只需索引可能的列,然後不必擔心性能,除非你看到糟糕的表現。 – 2010-03-15 16:49:41
MySQL不優化視圖,簡單明瞭。您應該擔心自己的觀點,就像擔心常規查詢一樣 - 不多也不少。 – 2010-03-15 17:45:53