ホームページ >バックエンド開発 >PHPチュートリアル >Mysql により、複雑なクエリに対して保存された結果のページングが可能になります_PHP チュートリアル
mysql は、複雑なクエリに対して保存された結果のページングを可能にします。
ページングについて議論している人はほとんどいないようですが、彼らは全員、limit m,n に夢中になっているのでしょうか?
インデックス作成の場合は、limit m,n で十分高速ですが、複雑な条件で検索する場合、
where something by で順序付けされます。 somefield+somefield
mysql はデータベースを検索し、条件を満たす「すべて」のレコードを見つけて、m,n 個のレコードを取り出します。
データ量が数十万で、ユーザーが非常に人気のある単語を検索する場合、
昔の夢を追体験するために最後の数ページを読まなければなりません。 。 。 Mysql は非常に悲惨な状況になり、ハードディスクを操作し続ける必要があります。
そこで、mysql にもページングを保存させてみることができます。もちろん、プログラムは連携する必要があります。
(これは単なるアイデアです。皆さんも議論してください)
ASP ページング: ASP システムでは、ページングを実装するための Recordset オブジェクトがありますが、大量のデータがメモリに配置されます。いつ無効になるかはわかりません (ASP 専門家にガイダンスを求めてください)。
SQL データベース ページング: ストアド プロシージャとカーソルを使用したページング。必要な結果を取得するために 1 つのクエリを使用する場合を想像してください。または、ID セット。後続のページが必要な場合は、結果の関連レコード内の ID を読み出すだけです。このようにして、このクエリのすべての ID を保持するのに必要なスペースはわずかです (SQL のクエリ結果から期限切れのガベージを削除する方法がわかりません)
このようにして、mysql はストレージをシミュレートできます。ページングメカニズム:
1. select id from $table where $condition order by $field limit $max_pages*$count;
条件を満たす ID をクエリします。
条件を満たすレコードの最大数を制限します。追加してください。
2. PHP のすべての変数は実行後に失われるため、以下を検討できます:
スキーム a. mysql で一時テーブルを作成し、一意の識別子として時刻または乱数を使用してクエリ結果を挿入します。 page1〜ページフィールドは、ページに必要なIDを保存します。ファイルを保存します。
- ユーザーユーザー、ユーザーはクエリの結果が開きます。 2 次元配列
と $$var はどちらも優れた方法です。
3. 各ページのリクエストで、対応する ID を「,」で区切って直接検索します。
Select * from $table where id in ($ids); 速度は非常に高速です