0

テーブルに多くのレコードがある mysql db サーバーで php を使用してクエリを実行しているselect * from table order by date descため、応答時間が遅くなります。

それで、応答を高速化する方法はありますか?インデックス作成が答えの場合、すべての列にインデックスを作成する必要があります。

4

4 に答える 4

0

クエリの最適化は大きなトピックであり、この質問の範囲を超えています

selectステートメントを後押しするいくつかのハイライトを次に示します

  • 適切なインデックスを使用する
  • レコード数を制限する
  • select * from table必要な列名を使用します ( useと書く代わりにselect col1, col2 from table)

大きなオフセットのクエリを制限することは、mysql では少しトリッキーです。大きなオフセットの select ステートメントは、大量のデータ セットを処理する必要があるため、遅くなります。

SELECT * FROM table order by whatever LIMIT m, n;

ここでこのクエリを最適化するのは簡単な解決策です

select A.* from table A 
  inner join (select id from table order by whatever limit m, n) B
  on A.id = B.id
order by A.whatever
于 2013-02-08T13:10:15.420 に答える
0

キャッシュシステムを使用する必要があります。私が知っている最善の方法Memcacheアプリケーションを高速化することは本当に素晴らしいことであり、データベースをまったく使用していません。

于 2013-02-08T12:27:28.107 に答える
0

インデックスは、WHERE 句がある場合、またはインデックスを作成したフィールドで JOIN を実行する場合に検索を高速化します。あなたの場合はそうしません: テーブル内のすべてのエントリを選択します。したがって、インデックスを使用しても役に立ちません。

そのテーブルのすべてのデータが本当に必要ですか? 後でこのデータを PHP でフィルタリング、検索、または集計する場合、データベースが PHP に送信するデータが少なくなるように、SQL でそれを行う方法を検討する必要があります。

于 2013-02-08T12:21:37.673 に答える
0

簡単な答え: ソフトウェアを使って何かを高速化することはできません。

理由: テーブルの内容全体を選択していて、それが大きなテーブルだと言いました。

できることはデータをキャッシュすることですが、キャッシュできるデータ量に制限があるため(キーごとに1 MB)、Memcacheを使用しないでください。データがそれを超える場合は、Memcacheを使用して巨大な結果セットをキーと値を維持する効率的なスキームを考え出す。

WHERE 句がないため、インデックス作成は役に立ちません。order by 句をわずかに高速化できる可能性があります。クエリの前に EXPLAIN EXTENDED を使用して、ネットワークを介したデータの送信に費やされた時間と、クエリからのデータの取得と並べ替えに費やされた時間を確認します。

アプリケーションが機能するために大量のデータが必要な場合は、次のオプションがあります。

  • データをより速くプッシュできる、より優れたサーバーを入手する
  • 実行するために非常に多くのデータが必要な場合、効率を考慮して設計されていない可能性があるため、アプリケーションを再設計します。
于 2013-02-08T12:38:54.093 に答える