-5

どのスキームがより高速か知りたいですか?

1 番目のスキーム: 列を持つ 1 つのテーブル users: cust_id、name、surname (100 000 行あります)

2 番目のスキーム: cust_id によって名前が付けられた 100,000 個のテーブル (各テーブルには 1 行のみ)

どうあるべきかは尋ねません-2番目の例はあまり賢くないことは知っています-しかし、どちらがより高速にクエリできるか知りたいですか? クエリが高速かどうか

select name from users where cust_id = 194923
-> one result: John Doe

また

select name from users_194923
-> one result: John Doe
4

3 に答える 3

4

簡単な演習:

サーバーがを処理するとどうなると思いますselect * from table_123456か?発生する魔法にはさまざまな種類がありますが、それでもサーバーはテーブルtable_123456が存在するかどうかを確認する必要があります。ほとんどのデータベースサーバーでは、名前が付けられたテーブルが存在することを確認することは、適切にインデックス付けされたテーブルで、table_123456行が存在するかどうかを確認することとほぼ同じタイムスケールです。id=123456たとえば、SQL Serverは、テーブルの名前を。というシステムテーブルに保持しますsys.tables

そして、「Peter」と呼ばれるすべてのユーザーを返すクエリを作成することがどれほど楽しいか想像してみてください。この2つのアプローチを比較することは、間違っているよりも間違っています。

于 2013-03-15T13:27:43.317 に答える
4

100 000 tables本当?そうしないでください!

明らかに、2番目のテーブルは、それがどのテーブルであるかを知っていて、レコードが1つしかないため、より高速です。しかし、ここに問題があります。5人を検索したい場合はどうでしょうか。どうやってそれをしますか?その人がどこに保管されているかわからない場合はどうなりますか?

データベースサーバーは、膨大なレコードのセットを格納するように設計されています(テーブルごとに1つのレコードではありません)。

レコードの検索が心配な場合は、通常検索する列にインデックスを定義するだけです。

于 2013-03-15T12:21:33.687 に答える
1

それぞれに1つのレコードで構成される10000個のテーブルを持つデータベースを処理できないため、2番目のスキーマに関する質問は無関係または論理的ではありません。スキーマ 1 を使用する必要があります。これは関連性があり、その中にいくつかのロジックを示しています。ありがとう

于 2013-03-15T13:02:10.523 に答える