検索
ホームページphp教程php手册MySQL クエリにおけるページングのアイデアの最適化

mysql|ページネーション|最適化

著者: steeven

ページングについて議論している人はほとんどいないようですが、皆さんは、limit m,n に夢中ですか?
インデックス作成の場合は、limit m,n で十分高速ですが、複雑な条件で検索する場合は、
何かが見つかりません。 order 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~pagen フィールドを作成します。各フィールドは、1 つの ID が 1 つのレコードに対応するように、ページに必要な ID を保存します。ファイルを保存します。
$IDs 配列 $IDs[1]~$IDs[$max_pages] を作成します。ユーザーが同時に複数の
ウィンドウを開いてクエリを実行する場合があることを考慮して、クエリを回避するために $ids に一意のマークを付ける必要があります。相互に上書きした結果です。 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 に別れを告げてください。より高度なキーワード インデックス クエリ。

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








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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター