2

シナリオ 1

「メンバー」と言うテーブルが1つあります。そのテーブル「メンバー」には、7つのフィールドがあります(memid、login_name、password、age、city、phone、country)。私のテーブルには 10K のレコードがあります。1 つのレコードをフェッチする必要があります。だから私はこのようなクエリを使用しています

mysql_query("select * from member where memid=999");

シナリオ 2

「メンバー」と呼ばれる同じテーブルがありますが、このメンバーと member_txt のようにテーブルを分割しています。したがって、私の member_txt テーブルには memid、age、phone、city、country があり、メンバーテーブルには memid、login_name があります。パスワード。

データをすばやく取得するための最適なシナリオはどれですか? 単一のテーブルに移動するか、テーブルを参照して 2 つに分割しますか?

注: PHP と MYSQL で特定のデータをフェッチする必要があります。どの方法に従うのが最善か教えてください。10,000 件のレコードがあります

4

3 に答える 3

2

あなた自身の健康のために、単一テーブルのアプローチを使用してください。

の主キーを使用している限りmemid、物事は非常に高速になります。これはPRIMARY KEY、インデックスが自動的に割り当てられるためです。これにより、基本的にデータの正確な場所が示され、データを調べる必要がなくなります。

http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.htmlから

インデックスは、特定の列の値を持つ行をすばやく見つけるために使用されます。インデックスがない場合、MySQL は最初の行から始めて、テーブル全体を読み取って関連する行を見つける必要があります。テーブルが大きいほど、このコストは高くなります。テーブルに問題の列のインデックスがある場合、MySQL は、すべてのデータを調べる必要なく、データ ファイルの途中でシークする位置をすばやく判断できます。テーブルに 1,000 行ある場合、これは順次読み取りよりも少なくとも 100 倍高速です。ほとんどの行にアクセスする必要がある場合は、ディスク シークが最小限に抑えられるため、順次読み取る方が高速です。

2 番目のアプローチでは、システムが複雑になるだけで、何のメリットもありません。

シナリオ 1 を使用します。

于 2012-05-25T06:00:57.930 に答える
0

memid プライマリ/一意キーを作成してください。1 つのテーブルを持つ方が 2 つのテーブルを持つよりも高速です。

于 2012-05-25T05:52:42.350 に答える
0

一般に、主キーでアクセスする限り、10,000 行のパフォーマンスに大きな影響を与えることはありません。

また、1 つのテーブルからデータをフェッチする方が、2 つのテーブルからデータをフェッチするよりも高速であることに注意してください。

さらに最適化する場合は、select ステートメントで * 演算子の代わりに列名を使用します。

于 2012-05-25T05:54:42.177 に答える