2017-11-28 9 views
0

utf8mb4が有効なmariadb(バージョン10.2.10)テーブルがあります。行を一意に識別するvarchar(120)列のjobIDがあります。現在、私は60文字の長さのjobIDを使用しています(将来的にはオプションを増やすことができます)。だから、私はそれを主キーにしました。mariadb varchar 120文字主キー

今、60Kレコードあります。だから、detail given hereを使ってdatafile + indexfileのサイズを調べると、datafileのサイズはindexfileとほぼ同じになっています。したがって、私が宣言した主キーのために、データファイルが上昇しているので、インデックスファイルは1:1に上昇しています。

したがって、私は、hereのように整数の自動インクリメントプライマリキーを追加し、jobIDカラムを一意のキーにすることを考え始めました。しかし、インデックスファイルがデータファイルとともに1:1になるという問題と、テーブルのサイズが増加するにつれてテーブルへの新しい挿入のパフォーマンスの低下(テーブルには今後2千万レコードがある)が私を混乱させました。適切なアプローチは何でしょうか?前もって感謝します。

私の現在のテーブルを作成します。

CREATE TABLE jobsTable (
`jobId` varchar(100) NOT NULL, 
`status` varchar(15) NOT NULL, 
`addedTime` varchar(13) NOT NULL, 
PRIMARY KEY(`jobId`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

答えて

0

PRIMARY KEYは、定義上(MySQLの場合)UNIQUEです。

CREATE TABLE ... 
    ... 
    PRIMARY KEY(jobID), 
    UNIQUE(jobID) -- redundant, and a waste of space; DROP it. 
... 

InnoDBでは、データとPKが共存( "クラスタ化")されています。しかし、すべての「セカンダリ」キーは、より多くのスペースを占有します。

それはそれを説明していない場合、... SHOW CREATE TABLEを見ることなく答えることができません。そして、サンプルのjobIDはどのように見えますか?二次キーの数に応じて

、と彼らはのようなもの、私はAUTO_INCREMENT PKを使用してに対してかためを勧告することができます。

+0

こんにちは@ジェイムス、私は作成テーブルを追加しました。私は主キーのみを定義しています。一意のキーは定義されていません。応答していただきありがとうございます。 – bgth

+0

奇妙な。 "Index_length"は0(または16 KB)のままにする必要があります。 'SHOW TABLE STATUS LIKE 'jobsTable'; ' –

+0

こんにちはRick Jamesさん、ありがとうございます。私は再びチェックして戻ってきます。 – bgth

関連する問題