2017-10-25 9 views
1

私は、mysqlを使ってパーティションテーブルを作成しようとしていますが、パーティションの数を指定したくありません。例えば、与えられたテーブルでは、私は各地域ごとに100,000以上のレコードを持っています。私は地域を知らない。彼らは後で来るでしょう。領域に基づいてパーティションの数が増えるはずですが、シンタックスの下では、値が異なる複数の行を挿入しても、単一のパーティションが作成されます。MYSQLでキーベースのテーブル分割を使用して動的なパーティション数を作成する方法は?

私はパーティションカウントについて言及していませんでした。

CREATE TABLE `members` (
     `firstname` varchar(25) NOT NULL, 
     `lastname` varchar(25) NOT NULL, 
     `username` varchar(16) NOT NULL, 
     `email` varchar(35) DEFAULT NULL, 
     `region` varchar(10) DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 
    PARTITION BY KEY (region); 

答えて

0

https://dev.mysql.com/doc/refman/5.7/en/partitioning-hash.html言う:

あなたは同じ動作がKEYパーティショニングに適用されます1.

にPARTITIONS句、パーティションのデフォルトの数が含まれていない場合。

各地域ごとに1つのパーティションが必要と思われるようです。あなたはそうしない。各パーティションに複数の領域が格納されている場合があります。もちろん、たとえば8つのパーティションがあり、12の異なる領域を格納している場合は、これは真でなければなりません。これは問題ではありません。

KEYまたはHASHパーティション方式のパーティション数を変更するにはALTER TABLEを使用できますが、ALTER TABLEを再び使用するまでは固定されたままになり、新しいパーティションセットに行が再分配されます。

代わりにLISTパーティションを使用して、各リージョンが格納されているパーティションを制御できるようにすることもできます。また、ALTER TABLEを使用してパーティション定義を変更して新しいリージョンをサポートできます。

私は、パーティショニングをまったく使用する必要はないということも述べます。多くの開発者がどのように多くのパーティション化が役立つかを過大評価しています。索引を適切に使用するだけで、問合せのパフォーマンスを向上させることができます。

0

PARTITION BY KEY()またはLIST()またはHASH()は、あなたの目標がパフォーマンスを向上させる場合はおそらく役に立たないでしょう。代わりに、regionで始まる適切なインデックスを持つことも同様に行います。

新しい「領域」に遭遇した場合、新しいパーティションを追加することは現実的ではありません。

パーティションごとに100K行しかない場合、テーブルはほとんどPARTITIONingで気になります。

PARTITIONsの数には制限があります。ハード制限は8Kです。実際の制限は50です。

さらにdiscussionです。

関連する問題