ホームページ  >  記事  >  データベース  >  mysqlでページングクエリを実装する方法

mysqlでページングクエリを実装する方法

coldplay.xixi
coldplay.xixiオリジナル
2020-10-23 09:23:524901ブラウズ

Mysql ページング クエリ方法: 1. [*] の代わりに特定のフィールドを使用します; 2. 最初にインデックスを検索します; 3. [between...and] を使用します、ID は継続的に増加する必要があります; 4. そのままにします前のページ レコードが配置されている ID。

mysqlでページングクエリを実装する方法

Mysql ページング クエリ メソッド:

簡単な説明

  • 通常MySQL では、ページング クエリを実行するために、limit #{limit}、#{offset} が使用されます。

  • テーブル内のレコードが多く、ページ数 (#{limit}) が大きい場合、ページング クエリの効率が遅くなります。

  • 速度が低下する理由は、ページング クエリ中に最初に制限オフセット レコードがクエリされ、その後、後続のオフセット レコードがインターセプトされるためです。

  • この記事では、実際の 1 億 4,000 万テーブル big_table を例として、ページング クエリを最適化する方法を記録します。

テストの説明

  • テスト テーブル: big_table、データ量: 1 億 4,000 万。

元の SQL (4500ms)

-- 原始分页查询,耗时:4500ms
select * 
from big_table
limit 2000000,10;

遅さの理由:

1. クエリ条件は *

2. 制限= 2000000 は大きすぎます

最適化 1 (推奨): * の代わりに特定のフィールドを使用します (1600 ミリ秒)

-- 用明确字段代替*,耗时:1600ms
select id,uid,media_id,media_name,news_id,comment 
from big_table
limit 2000000,10;

最適化 2: 最初にインデックスを検索します ( 450ms)

-- 方法1:先对索引进行分页查询,耗时:450ms
select * from big_table AS h inner join
 (select id from big_table
  limit 2000000,10) AS ss 
 on h.id = ss.id;
-- 方法2:先查询出起始位置的索引,耗时:450ms
select * from big_table
where id > (
select id from big_table limit 2000000,1
)
limit 10;

最適化 3: ... と (5ms) の間

制限事項: ID は継続的に増加する必要があります。

-- 上一页保留最后一条记录所在id,耗时:5ms
select * from big_table
where id between 4882489 and 4882489 + 10 ;

最適化 4 (推奨): 前のページのレコードの ID を保持します (5 ミリ秒)

制限事項: 最後のレコードの ID を保持する必要があります前のページ

-- 上一页需要保留最后一条记录所在id,耗时:5ms
select * from big_table
where id > 4882488
limit 10;

#その他の関連する無料学習の推奨事項: #mysql チュートリアル(ビデオ)

以上がmysqlでページングクエリを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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