2017-01-09 5 views
0

は「猫」と「豚」、だから、一つの表対多くの表のデータベース設計パフォーマンス

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 
); 

、私はANIMALテーブルを持っていると言いますそれは "犬"を含む行の検索を遅くするでしょうか?

また、DOG、CAT、PIGの3つのテーブルを用意する必要があります。この方法では、データはすでに分離されています.DOGを照会すると、私は犬のテーブルに行きます。 「Dog」を検索しているときに、「Cat」と「Pig」をフィルタリングするという意味で、1つの大きなテーブルがパフォーマンス上の問題を抱えている可能性があります。

+2

これはデータベース設計を行う方法ではありません。リレーショナル・データ設計時に行数を心配する必要はありません。 – RBarryYoung

+0

私はアプリケーションに実装できるので、どのアプローチが高速になるのか不思議です。 – Zanko

+1

データ設計を最初に行う方が速く、後でパフォーマンスチューニングのためのより多くの実行可能なオプションがあります。 – RBarryYoung

答えて

1

もしあなたが1,000,000の行を持っていれば、各動物に約30万行あるでしょう。あなたは本当に3つの行に1つをフェッチするクエリを高速化することはできません。

これは厳密には当てはまりません。あなたができることは2つあります。あなたは動物の種類ごとにテーブルを分割することができます。パーティション化のために100万行のテーブルがローエンドにあります。

もう1つは、動物型のクラスタード・インデックスを作成できることです。 MySQLでは、動物型を最初に指定したキーとして複合主キーを宣言することでこれを行います。

+0

お返事ありがとうございます! "あなたは本当に3行で1つを読み出すクエリを高速化できません。"より高速な「フー」の名前で「犬」のための大きなテーブルを照会します (私は5000匹の犬を買ってあげると言うことができます) 対 「フー」 – Zanko

+0

@Zankoの名前で犬テーブルを照会。 。 。 'name'にインデックスを付けると、速度は本質的に同じになります。 –

+0

ありがとうございました! – Zanko

関連する問題