ホームページ >バックエンド開発 >PHPチュートリアル >PHP のメモリ消費と高い同時処理、PHP のソート。

PHP のメモリ消費と高い同時処理、PHP のソート。

WBOY
WBOYオリジナル
2016-06-20 12:49:221359ブラウズ

SQL クエリを作成し、取得した配列の添字でソートします。ただ、先輩曰く、アクセスが多いとメモリを大量に消費するので、ネットでよく読んでいるのですが、キャッシュを使う方法があるとのことですが、他に対処方法はありますか?


ディスカッションへの返信 (解決策)

ステートメントは大量のメモリを消費しません。 activeNum は単なるインデックスです。
もちろん、キャッシュがあることが最善です。

ステートメントは大量のメモリを消費しません。 activeNum は単なるインデックスです。
もちろん、キャッシュがあることが最善です。


データが数十万または数百万ある場合、誰かがインデックスにアクセスするたびにデータを取得するためにリソースが消費されませんか?
インデックスを追加する場合、どのようなインデックスを追加する必要がありますか?このフィールドはいつでも変更されます。


ステートメントは大量のメモリを消費しません。 activeNum は単なるインデックスです。
もちろん、キャッシュがあることが最善です。


データが数十万または数百万ある場合、誰かがインデックスにアクセスするたびにデータを取得するためにリソースが消費されませんか?
インデックスを追加する場合、どのようなインデックスを追加する必要がありますか?このフィールドはいつでも変更されます

データ値が一意の場合は一意のインデックスを追加し、それ以外の場合は通常のインデックスを追加します
mysql テーブルに数百万のデータがある場合は、次のことを行う必要があります。サブテーブルを検討してください

1. 配列の添字によるソートのコードが見つかりませんでした
2. activeNum にインデックスがあるはずです (通常のインデックスで十分です)
3. 知っていますかデータベースへのアクセスとキャッシュへのアクセスの違いは何ですか?
圧力をデータベースからキャッシュに転送することは間違いなく適切ですか?
データが数十万または数百万ある場合、キャッシュ戦略は何ですか?

1. 配列の添字によるソートのコードが見つかりませんでした
2. activeNum にインデックスがあるはずです (通常のインデックスで十分です)
3. 方法を知っていますか?データベースとキャッシュにアクセスするのは違いますか?
圧力をデータベースからキャッシュに転送することは間違いなく適切ですか?
データが数十万または数百万ある場合、キャッシュ戦略は何ですか?



activeNum は数値型ですが、インデックスの使用も有効ですか?インデックスは where フィールドでのみ使用されると常に考えていました。インデックスはフィールドの並べ替えにも使用できますか? それ以外の場合、データの量が非常に多くなり、インデックスが使用されなくなります。適切ではありません。データベースはクラッシュしません。

1. 配列の添字によるソートのコードが見つかりませんでした

2. activeNum にインデックスがあるはずです (通常のインデックスで十分です)

3. 方法を知っていますか?データベースとキャッシュにアクセスするのは違いますか?

圧力をデータベースからキャッシュに転送することは間違いなく適切ですか?
データが数十万または数百万ある場合、キャッシュ戦略は何ですか?


現在、activeNum フィールドにはインデックスが付けられていません。
クエリ コマンドを説明してください

MySQL が役立つ提案を提供します。それを当然のことと考えるのではなく、



クエリ コマンド

を説明すると、MySQL が役立つ提案を提供します。それを当然のこととして



と言うのではなく、コマンドを通じてインデックスが使用できないことがわかりました。今考えている方法の 1 つは、新しいランク テーブルを作成してユーザーのランクを置くことです。配列に従ってIDとランキングを取得し、ランクテーブルに置き、新しいテーブルにuidが0のフィールドを追加し、ランキングを取得するたびに書き込んだ時間をランキングに入れます。最初に uid=0 で時間を取得し、現在の時間と比較します。それが 30 分を超えている場合は、再度アクティブなテーブルにアクセスしてランキングを読み取り、ランク テーブルに入れます。この方法が実現可能かどうかわかりませんか?


possible_key は使用できるインデックスです。activeNum にインデックスを付けていないため、インデックスはありません。
したがって、Extra 列には filesort があり、一時ファイルが activeNum のソートに使用されることを意味します。 >

possible_key は使用できるインデックスです activeNum にインデックスを付けていないため、インデックスはありません
したがって、Extra 列には filesort があり、一時ファイルが activeNum のソートに使用されることを意味します

さて、もう一度いじってみましょう。Linux では PHP がスレッドセーフであるかどうかに区別はありますか?たとえば、データベースを呼び出す DB を作成した場合、その DB は 1 回だけ参照され、すべてのユーザーによって使用されますか、それともすべてのユーザーに対して独立していますか?


全員が独立しています


シングルトン モードを試して、結果を静的変数に保存してみることができます

クエリの量が非常に大きく、データがリアルタイムでない場合は、キャッシュして処理できますが、データをリアルタイムにする必要がある場合は、まず通常のインデックスがどこにあるかを見つけます。他の最適化が基礎となります。

皆さん、ありがとうございます。キャッシュに一時テーブルを使用することで問題は解決しました。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。