2009-05-03 17 views
7

私は比較的大きなDBテーブル(700K行)でプロジェクトに取り組んでいます。大きなテーブルのMySQLプライマリキーの列型

間違って、私はDBスキーマを設計しています。 行が増加しているときに、IDの列型bigint(x)を増やす必要がありました。

今はbigint(44)です。 パフォーマンスが大幅に低下する可能性があると思ったため、高いx値を設定することを恐れています。多分私は間違っています。

私は問題を解決するのを手伝ってください。

一度設定してこの問題を忘れることはできますか?

DBスキーマ設計の分野では、どうすればよいでしょうか?

答えて

13

BIGINT(44)という列を作成すると、「44」が表示幅になります。保存できる値の範囲や検索速度には影響しません。

自動増分IDの場合は、UNSIGNEDの番号を使用します。 BIGINT(44) UNSIGNED。これは値の範囲を倍にして、通常は良いことである特別な制約を追加します。

符号なしINTは最大4,294,967,295を格納します 符号なしBIGINTは最大18,446,744,073,709,551,615を格納します。すぐにはその値を記入しません。

あなたの最大IDがどのくらい速く成長しているかは言えません。多くの行を挿入しない場合は、より少ないスペースでUNSIGNED INTを使用する必要があります。

1

私はどのプライマリキーもデフォルトでは署名されていないと思います。いずれにしても、主キーに負の数を使用すると、せいぜい目立つようになり、物が壊れます。

+0

もっと具体的に教えてください。 「壊れたもの」はかなり曖昧です。それは正確に何が壊れますか? – Nobody

関連する問題