1

WHERE と ORDER BY の条件を使用して、データベースから 25 列を選択する必要があります。

そのためのインデックスを作成しようとしましたが、16 列のみに制限されています。PHP内のデータベースからこれらの25列を選択する最速の方法のために、mysqlステートメントとデータベースをどのように編成できますか?

例の表:

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

クエリ: 「SELECT A、B、C、D、E、F、... FROM テーブル WHERE X = 5 ORDER BY Z」

更新 1:

これは大きなテーブル (多くの行) であるため、プロセスを高速化するためにインデックスが必要です。

4

4 に答える 4

7

インデックスは、選択した列の数に関連してパフォーマンスに影響を与えません (FULLTEXT を除く)。これらは、選択 (WHERE) と、場合によっては順序付け (ORDER BY) および集計 (GROUP BY など) を使用する場合に高速化するためにのみ使用されます。

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

また、すべての列を含むインデックスは、テーブル エントリとほぼ同じ (ソートされていますが) であるため、INSERT/UPDATE/DELETE のパフォーマンスは大幅に低下しますが、SELECT のパフォーマンスはあまり向上しません。

于 2012-05-03T12:12:52.180 に答える
1

上記の列を含むビューで、これに対してselectステートメントを実行するのはどうですか?

于 2012-05-03T12:16:46.123 に答える
0

あなたの場合、役立つ唯一のインデックスは、x と z の両方のインデックスです。Alter table tbl add key (x, z)。

mysql は、クエリごとにテーブルごとに 1 つのインデックスのみを使用します。したがって、多数のインデックスを使用しても、この 1 つのクエリでは役に立ちません。

于 2012-05-03T12:41:03.960 に答える
-1

SELECT * FROM table where bla bla blaを使用するという意味ですか?

于 2012-05-03T12:17:00.327 に答える