利用 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...