MySQL 資料庫 分頁查詢

2022-03-29 20:27:05 字數 1883 閱讀 7822

在使用mysql 進行資料庫分頁查詢的時候最主要是使用limit子句進行查詢:

limit子句可以用來限制由select語句返回過來的資料數量,它有乙個或兩個引數,如果給出兩個引數, 第乙個引數指定返回的第一行在所有資料中的位置,從0開始(注意不是1),第二個引數指定最多返回行數。例如:

select * from table where … limit 10; #返回前10行

select * from table where … limit 0,10; #返回前10行

select * from table where … limit 10,20; #返回第10-20行資料

select * from table where ... limit 4 offset 9; # 返回從第9行開始的4條記錄

所以通過limit和offset或只通過limit可以實現分頁功能

假設 numperpage 表示每頁要顯示的條數

pagenum表示頁碼

那麼 返回第pagenum頁,每頁條數為numperpage 條資料的sql語句寫法為

語句1:select * from table limit (pagenum-1)*numperpage ,numperpage 

語句2:select * from table limit numperpage offset (pagenum-1)*numperpage

方式一:

select

*from

table

order

by id limit m, n;

該語句的意思為,查詢m+n條記錄,去掉前m條,返回後n條記錄。無疑該查詢能夠實現分頁功能,但是如果m的值越大,查詢的效能會越低(越後面的頁數,查詢效能越低),因為mysql同樣需要掃瞄過m+n條記錄。

方式二:

select

*from

table

where id > #max_id# order

by id limit n;

方式三:

為了避免能夠實現方式2不能實現的查詢,就同樣需要使用到limit m, n子句,為了效能,就需要將m的值盡力的小,比如當前在第3頁,需要查詢第5頁,每頁10條資料,當前第3頁的最大id為#max_id#:

select

*from

table

where id > #max_id# order

by id limit 20, 10

;

其實該查詢方式是部分解決了方式2的問題,但如果當前在第2頁,需要查詢第100頁或1000頁,效能仍然會較差。

方式四:

select

*from

table

as a inner

join (select id from

table

order

by id limit m, n) as b on a.id = b.id order

by a.id;

該查詢同方式1一樣,m的值可能很大,但由於內部的子查詢只掃瞄了字段id,而不是整張表,所以效能要強於方式1查詢,並且該查詢能夠解決方式2和方式3不能解決的問題。

方式五:

select

*from

table

where id > (select id from

table

order

by id limit m, 1) limit n;

該查詢方式同方式4,同樣通過子查詢掃瞄欄位id,效果同方式4。至於效能的話,方式5的效能會略好於方式4,因為方式5不需要在進行表的關聯,而是乙個簡單的比較。

參考:

MySQL 資料庫 分頁查詢

在使用mysql 進行資料庫分頁查詢的時候最主要是使用limit子句進行查詢 limit子句可以用來限制由select語句返回過來的資料數量,它有乙個或兩個引數,如果給出兩個引數,第乙個引數指定返回的第一行在所有資料中的位置,從0開始 注意不是1 第二個引數指定最多返回行數。例如 select fr...

資料庫MySQL之分頁查詢

當我們在京東購物,瀏覽商品列表的時候,由於資料特別多,一頁顯示不完,一頁一頁的進行顯示,這就是分頁查詢 select from 表名 limit start,count說明 limit是分頁查詢關鍵字 start表示開始行索引,預設是0 count表示查詢條數 例1 查詢前3行男生資訊 select...

mysql資料庫分頁查詢優化

原博 mysql單錶百萬資料記錄分頁效能優化 limit優化 當資料很多需要進行分頁查詢時 需要先查出第一條資料的id然後根據id查詢大於id的資料 limt 一頁的資料量 1.直接用limit start,count分頁語句,也是我程式中用的方法 select from product limit...