分頁查詢優化原理

2021-08-20 09:32:12 字數 1203 閱讀 5600

利用 limit 關鍵字作分頁查詢

在實際開發中,經常需要用到分頁查詢,我們可能寫過一條如下的sql語句:

select

*from 表1

limit m,n;

表示:從m+1開始計數,查詢n條記錄出來。

也有另一種寫法:

select

*from 表1

limit n offset m;

意思是:查詢n條資料,偏移量為m。

這種寫法固然沒有錯,但是當資料量很大的時候,offset也會特別大,這時效率就會很低。

mysql中的offset說明

mysql中並不是跳過offset行,而是取offset+n行,返回放棄前offset行,返回n行。

利用子查詢優化分頁

先快速定位id段,再進行關聯,在資料量大的時候,可提高效率。

select a.

*from 表1 a,

(select id from 表1

where 條件 limit

10000,20

) b where a.id=b.id

或者

select a from 表1

where id >=

(select id from 表1

where 條件 limit

10000,1

)limit

20

以上sql邊界值需要測試

有一篇更詳細的講解:

另外:如果當order by 與 limit連用時,如果order by中的列有重複,則會有坑

select * from a left join b order by a.time desc limit 10

select * from (select * from a left join b order by a.time desc) limit 10結果是不同的,後一種寫法才是對的。

參考:如果 limit row_count 與 order by 一起使用,那麼在找到第乙個 row_count 就停止排序,直接返回。

如果 order by 列有相同的值,那麼 mysql 可以自由地以任何順序返回這些行。換言之,只要 order by 列的值不重複,就可以保證返回的順序。

分頁查詢優化

1 子查詢優化法 先找出第一條資料,然後大於等於這條資料的id就是要獲取的資料 缺點 資料必須是連續的,可以說不能有where條件,where條件會篩選資料,導致資料失去連續性。實驗下 如下 複製 mysql set profiling 1 query ok,0 rows affected 0.00...

分頁查詢優化

自己的乙個 由於單錶的資料記錄高達了一百萬條,造成資料訪問很慢,google分析的後台經常報告超時,尤其是頁碼大的頁面更是慢的不行。先讓我們熟悉下基本的sql語句,來檢視下我們將要測試表的基本資訊 use infomation schema select from tables where tabl...

mysql 分頁優化 Mysql 查詢分頁優化

全表掃瞄,速度極慢 limit 語句的查詢時間與起始記錄的位置成正比 mysql 的 limit 語句是很方便,但是對記錄很多的表並不適合直接使用 建立測試表 drop table if exists t user create table test t user id int 10 unsigne...