2012-05-03 2 views
1

WHEREとORDER BYという条件で、データベースから25の列を選択する必要があります。mysqlデータベースから多くの列を選択する最速の方法は何ですか?

インデックスを作成しようとしましたが、16列に制限されています。 PHP内のデータベースからこれらの25個のカラムを選択する最速の方法については、どのようにmysql文とデータベースを整理できますか?

例表:

列:A、B、C、D、E、F、...

クエリ:「A、B、C、D、E、Fを選択します。 ..

UPDATE 1「WHERE Z BY X = 5 ORDER FROMテーブル:

それは私がプロセスをスピードアップするために、インデックスを必要とする理由です大きなテーブル(多数の行)です。

+0

ORDER BYは__not__条件です... WHERE句に表示されるビットは条件です。個々の列に対して複数の索引を作成するか、表を再構成する –

+0

真、編集しました。 – BastiaanWW

答えて

7

インデックスは、選択した列の数(FULLTEXTを除く)に対してパフォーマンスがありません。それらは、選択(WHERE)を使用し、時には順序付け(ORDER BY)と集約(GROUP BYなど)を使用する場合にのみ使用されます。

この場合、最適な効率を得るために、XとZにインデックスを定義する必要があります。 MySQLではクエリごとに1つのインデックスしか使用できないため、(X、Z)のインデックスが必要です(Xでの選択が最初で、次にZでの順序付けが必要なため)。 これはXのインデックスとなります。

すべての列を含むインデックスは、(並べ替えられていますが)ほとんど同じですが、INSERT/UPDATE/DELETEのパフォーマンスは大幅に低下しますが、SELECTパフォーマンスの向上はほとんどありません。

+0

私は、あなたがインデックスに選択したいカラムを置かないと、遅いポイントクエリーを取得することを知りました。私がXとZのインデックスだけを作っても、そのプロセスを遅くする多くのポイントクエリーは得られませんか? – BastiaanWW

+0

が正しくありません。インデックスの仕組みは、関連情報と行の場所への参照を格納する方法です。列から追加の列を取得するのは簡単な操作です。ロールックアップが必要ない場合は少し速くなりますが、パフォーマンスの向上は非常に小さく、他の欠点(テーブルのサイズ変更などの操作のスピードなど)を超過し始めることさえありません。 )。あなたはそれらについて読むべきです:http://en.wikipedia.org/wiki/Database_index – dtech

+0

これが持続可能な唯一の時間は、列の特定の組み合わせが頻繁に使用されるときですが、それでも私はそれが反対であるとして助言するでしょうインデックスの目的 – dtech

1

上記の列のビューとこれに関するselect文の実行についてはどうですか?

+0

上記の列を含むビューはどのように表示されますか? – BastiaanWW

+0

@BastiaanWW表示:http://en.wikipedia.org/wiki/View_%28database%29 – dtech

-1

あなたはSELECT * FROMテーブルを使用することを意味しましたか?bla bla bla?

+0

はい、そうです – BastiaanWW

0

あなたのケースでは、xとzの両方のインデックスのみが役立ちます。テーブルtbl addキー(x、z)を変更します。

mysqlはクエリごとにテーブルごとに1つのインデックスしか使用しません。多くのインデックスを持つことは、この1つのクエリに役立つものではありません。

関連する問題