テーブルに多くのレコードがある mysql db サーバーで php を使用してクエリを実行しているselect * from table order by date desc
ため、応答時間が遅くなります。
それで、応答を高速化する方法はありますか?インデックス作成が答えの場合、すべての列にインデックスを作成する必要があります。
クエリの最適化は大きなトピックであり、この質問の範囲を超えています
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
キャッシュシステムを使用する必要があります。私が知っている最善の方法Memcacheアプリケーションを高速化することは本当に素晴らしいことであり、データベースをまったく使用していません。
インデックスは、WHERE 句がある場合、またはインデックスを作成したフィールドで JOIN を実行する場合に検索を高速化します。あなたの場合はそうしません: テーブル内のすべてのエントリを選択します。したがって、インデックスを使用しても役に立ちません。
そのテーブルのすべてのデータが本当に必要ですか? 後でこのデータを PHP でフィルタリング、検索、または集計する場合、データベースが PHP に送信するデータが少なくなるように、SQL でそれを行う方法を検討する必要があります。
簡単な答え: ソフトウェアを使って何かを高速化することはできません。
理由: テーブルの内容全体を選択していて、それが大きなテーブルだと言いました。
できることはデータをキャッシュすることですが、キャッシュできるデータ量に制限があるため(キーごとに1 MB)、Memcacheを使用しないでください。データがそれを超える場合は、Memcacheを使用して巨大な結果セットをキーと値を維持する効率的なスキームを考え出す。
WHERE 句がないため、インデックス作成は役に立ちません。order by 句をわずかに高速化できる可能性があります。クエリの前に EXPLAIN EXTENDED を使用して、ネットワークを介したデータの送信に費やされた時間と、クエリからのデータの取得と並べ替えに費やされた時間を確認します。
アプリケーションが機能するために大量のデータが必要な場合は、次のオプションがあります。