MySQL では、複雑なクエリに対して保存された結果のページングが可能になります。 (議論することを歓迎します)

WBOY
リリース: 2016-06-21 09:12:35
オリジナル
1027 人が閲覧しました

mysql|ページネーション

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を保存します。ファイルを保存します。 $ $ ids、$ ids [1]〜$ ids [$ max_pages]の配列を作成します。相互に上書きします。 2 次元配列
と $$var はどちらも優れた方法です。
3. 各ページのリクエストで、「,」で区切られた対応する ID を直接見つけます。
Select * from $table where id in ($ids); 速度は非常に高速です
4.結果は自動クリアとみなされる必要があります。タイマーまたは比例ランダム クリアを設定できます。 mysql 一時テーブルを使用する場合は、タイムスタンプフィールドを追加する必要があり、一定期間操作されなかった場合はセッションに $IDs["time"]=time() を追加します。期限切れデータとして。

5. 最適化したい場合は、1 と 2.a のステートメントを select... into ....にマージすることを検討してください。

注:
1. 上記は単なる mysql のパッチ適用ソリューションです。 mysql はいつこれらの機能を追加しますか? 2. 他のデータベースにも適用できます。
3. 他のデータベースにさらに高度なページング方法がある場合は、私に知らせるか、steeven@kali.com.cn にメールしてください。
4. クエリするデータが本当にたくさんある場合は、SQL と Oracle の両方が提供する mysql に別れを告げてください。より高度なキーワード インデックス クエリ。

卓越性を目指して、上記は単なる紹介にすぎません。ページネーションの問題について一緒に議論することを歓迎します。 (他のデータベースにも使用できます)
いつか、初心者が参照できるようにさまざまなページング方法が整理されることを願っています。




関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート