1

私はテーブルcompanyを持っています。これはcountry_idというカラムを持っていて、countryテーブルの主キーIDの参照です。MySQL - 多国籍企業のパフォーマンスを向上させる

CREATE TABLE `company` (
    `Id` INT(11) NOT NULL, 
    `Name` VARCHAR(100) NOT NULL, 
    `Symbol` VARCHAR(50) NOT NULL, 
    `Industry` VARCHAR(100) NOT NULL, 
    `Type` VARCHAR(20) NOT NULL, 
    'country_id' INT(11) NOT NULL, 
    PRIMARY KEY (`Id`), 
    CONSTRAINT `company_ibfk_1` FOREIGN KEY (`country_id`) REFERENCES `country` (`Id`) 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB; 

この表には、複数の国の複数の会社があります。下の表のように。

enter image description here

companyテーブルには、膨大なデータを持っています。私はcompany上の選択クエリを向上させるには、国に基づいてテーブルのパフォーマンス。選択クエリは次のようになります

select * from company where country_id = 2 

最適な設計アプローチは何ですか? country_id列にインデックスを追加する必要がありますか、またはcountry_id列に基づいてパーティションを行う必要がありますか?提案してください。

+0

をこのテーブルは読み取り専用である場合には(一度のしばらくの間を除いてこの目的のためにMyISAMを使用することを検討することができます。この種のテーブル – Preuk

+0

@Preukのセットアップで読取りパフォーマンスが改善されましたが、これは読取り専用表ではありません。継続的にデータがこの表に挿入されます。しかし、私の好みは、選択クエリを改善することです。 – Suvonkar

+0

country.idとcountry.nameが両方ともUNIQUEである限り、それらのうちの2つのテーブルだけが巨大であり(数百万の再記録)、小さなテーブル(最大200レコード) – Jay

答えて

0

国が多い場合(100以上)、インデックスを使用する必要があります。

あなたのDB内のいくつかの国で、パーティション分割を使用する方がよい場合は、
しかし、このオプションには大きな欠点があります。新しい国を追加する場合は、新しいパーティションに新しいパーティションを追加する必要があります。

0

InnoDBは外部キーcountry_idのインデックスを自動的に生成するため、インデックスを作成する必要はありません。 パーティションについては、InnoDBは外部キーとパーティションを一緒にサポートしていません。パーティションを使用している場合は、country_id(外部キーではない)にインデックスを作成し、必要に応じて両方のテーブルに参加できます。 あなたがcompanyに百万人以上のレコードを持っているし、あなたのクエリが十分に速くない場合は、以下のように、パーティションを使用することができます。

CREATE TABLE `company` (
     `Id` INT(11) NOT NULL, 
     `Name` VARCHAR(100) NOT NULL, 
     `Symbol` VARCHAR(50) NOT NULL, 
     `Industry` VARCHAR(100) NOT NULL, 
     `Type` VARCHAR(20) NOT NULL, 
     `country_id` INT(11) NOT NULL, 
     PRIMARY KEY (`Id`), 
     INDEX (`country_id`) 
    ) 

PARTITION BY RANGE (`country_id`) (
    PARTITION P1 VALUES LESS THAN (20), 
    PARTITION P2 VALUES LESS THAN (50), 
    PARTITION P3 VALUES LESS THAN (100), 
    PARTITION P4 VALUES LESS THAN MAXVALUE) 

    COLLATE='latin1_swedish_ci' 
    ENGINE=InnoDB; 
関連する問題