2017-01-09 51 views
0

說我有一個動物表,數據庫設計性能VS一個表

CREATE TYPE VALID_ANIMAL AS ENUM ('Dog', 'Cat', 'Pig'); 
CREATE TABLE IF NOT EXISTS ANIMAL (
    animal_type VALID_ANIMAL, 
    name  TEXT, 
    owner  TEXT, 
    .... many more common fields 
); 

所以,如果這個表是非常大的1個百萬與「狗」,「貓」和「豬」的混合排它會減慢搜索包含「狗」的行嗎?

或者我應該有3個名爲DOG,CAT和PIG的獨立表。這樣數據已經分開了,當查詢DOG時,我只會去看看狗表。我擔心,在搜索「狗」時,一張大桌子可能會出現性能問題,從而過濾掉「貓」和「豬」。

+2

這不是你應該怎麼做數據庫設計。在關係數據設計過程中,您不必擔心行數。 – RBarryYoung

+0

我只是好奇哪種方法會更快,所以我可以在應用程序中實現:) – Zanko

+1

將數據設計放在第一位更快,然後將有更多可行的選項用於後續的性能調整。 – RBarryYoung

回答

1

如果你有1,000,000行,那麼你可能每個動物約有300,000行。你實際上無法加快提取一行三行的查詢。

這不完全正確。有兩件事你可以做。你可以通過動物類型的表格進行分區。一百萬行表在低端進行分區。

另一件事是你可以在動物類型上創建一個聚集索引。在MySQL中,你可以通過聲明一個具有動物類型的複合主鍵作爲第一個指定鍵來做到這一點。

+0

感謝您的迴應!你能更詳細地解釋一下:「你實際上無法加快提取一行三行的查詢。」 這將是更快的查詢大表「犬」與「富」的名稱(可以說,我會得到5000只) VS 查詢犬表「富」 – Zanko

+0

@Zanko的名稱。 。 。通過'name'上的索引,速度將基本相同。 –

+0

非常感謝你! – Zanko