程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql limit分頁查詢優化寫法,mysqllimit

mysql limit分頁查詢優化寫法,mysqllimit

編輯:MySQL綜合教程

mysql limit分頁查詢優化寫法,mysqllimit


在mysql中進行分頁查詢時,一般會使用limit查詢,而且通常查詢中都會使用orderby排 序。但是在表數據量比較大的時候,例如查詢語句片段limit 10000, 20,數據庫會讀取10020條數據,然後把前10000條丟棄,把最後的20條返回給你,這種消耗是可以避免的,也是沒必要的。下邊介紹幾種優化方法:
  優化方法1(讓分頁操作在索引中進行):下載地址 
  一般表中經常作為條件查詢的列都會建立索引,例如如下查詢
  Sql代碼
  SELECT msg_id, msg_content FROM message ORDER BY gmt_create desc LIMIT 100, 20;
  可以寫成如下方式
  Sql代碼
  SELECT msg_id, msg_content FROM message
  INNER JOIN (
  SELECT msg_id FROM message
  ORDER BY gmt_create LIMIT 100, 20
  ) AS page USING(msg_id);
  這樣當前查詢頁的內容就只會在索引中進行,當得到當前頁的msg_id再統一通過一個INNER JOIN得到最終要得到的數據詳情,避免了對大量數據詳情進行操作的消耗。當然JOIN操作也可以通過子查詢實現,不過書中介紹5.6之前版本的 mysql相比子查詢還是優先使用JOIN。
  優化方法2(顯式指定要查詢的索引列范圍)
  例如方法一中的gmt_create是建立索引的列,而且你也知道要查詢的時間范圍,這樣你就可以通過如下查詢語句:
  Sql代碼
  SELECT msg_id, msg_content FROM message
  WHERE gmt_create BETWEEN #startTime# AND #endTime#
  ORDER BY gmt_create desc
  這樣數據庫通過一個范圍查詢就可以得到想要的數據。
  優化方法3(OFFSET作為查詢條件顯式指定)
  例子還是如上,我們可以在查詢參數中顯式指定一個查詢時間,叫做lastVisitTime吧。我們查詢第一頁可以用如下語句:
  Sql代碼
  SELECT msg_id, msg_content FROM message
  ORDER BY gmt_create desc
  LIMIT 20
  我們把讀出來的數據的最後一條數據的gmt_create字段記錄在lastVisitTime字段中,那麼後邊頁的查詢就可以用如下語句實現:
  Sql代碼
  SELECT msg_id, msg_content FROM message
  WHERE gmt_create < #lastVisitTime#
  ORDER BY gmt_create desc
  LIMIT 20;
  這種查詢方式,無論你查詢多少頁,分頁都不會是影響效率的因素。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved