2

1 つの大きなテーブルではなく、多くのテーブル (100,000 までとしましょう) を持つことの欠点は何かと思っていました。例として、ユーザーごとに 1 つのテーブル、または user_id がインデックスであるすべてのユーザーに対して 1 つの大きなテーブルがあります。

たとえば、これらの名前の 1 つstuff:

+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| id       | int(11) | YES  |     | NULL    |       |
| user_id  | int(11) | YES  |     | NULL    |       |
| x        | int(11) | YES  |     | NULL    |       |
| y        | int(11) | YES  |     | NULL    |       |
|    .     |    .    |   .  |  .  |    .    |   .   |
|    .     |    .    |   .  |  .  |    .    |   .   |
|    .     |    .    |   .  |  .  |    .    |   .   |

対。これらの多くは、それぞれに名前が付けられて[user_id]_stuffいます。そうすれば、user_id を指定してどのテーブルに移動するかがわかります。

+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| x     | int(11) | YES  |     | NULL    |       |
| y     | int(11) | YES  |     | NULL    |       |
|   .   |    .    |   .  |  .  |    .    |   .   |
|   .   |    .    |   .  |  .  |    .    |   .   |
|   .   |    .    |   .  |  .  |    .    |   .   |

私の直感では、多くのテーブルを使用すると実行速度が速くなりますが、1 つのテーブルを使用すると保守性と堅牢性が向上します。

また、テーブル名を作成するためにユーザーの ID が連結されているため、セキュリティ上の問題はありますか? 提供されたIDが数値であるかどうかを確認するのは簡単だと思いますが。

4

1 に答える 1

2

私の直感では、多くのテーブルを使用すると実行速度が速くなりますが、1 つのテーブルを使用すると保守性と堅牢性が向上します。

多くの同じ構造のテーブルは、直交設計の原則に反します。

しないでください少なくとも、非常に正当な理由がないわけではありません。適切なインデックスがあれば、MySQL がパーティショニングを必要とせずに、テーブルごとに数百万のレコードを簡単に処理できます。また、データを分割する必要があったとしても、この手動のクラッジよりも優れた方法があります (あいまいで一貫性のないデータが発生し、データ操作コードの冗長性と複雑さが生じる可能性があります)。言うまでもなく、MySQL では、結合は最大 61 テーブルに制限されています。

代わりに、単一テーブルのアプローチが問題の正しい解決策です。

于 2013-07-24T20:11:18.330 に答える