mysql分頁(yè)查詢案例講解
發(fā)表時(shí)間:2023-07-14 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]LIMIT子句可以被用于強(qiáng)制 SELECT 語(yǔ)句返回指定的記錄數(shù)。LIMIT 接受一個(gè)或兩個(gè)數(shù)字參數(shù)。參數(shù)必須是一個(gè)整數(shù)常量。如果給定兩個(gè)參數(shù),第一個(gè)參數(shù)指定第一個(gè)返回記錄行的偏移量,第二個(gè)參數(shù)指定...
LIMIT子句可以被用于強(qiáng)制 SELECT 語(yǔ)句返回指定的記錄數(shù)。LIMIT 接受一個(gè)或兩個(gè)數(shù)字參數(shù)。參數(shù)必須是一個(gè)整數(shù)常量。如果給定兩個(gè)參數(shù),第一個(gè)參數(shù)指定第一個(gè)返回記錄行的
偏移量,第二個(gè)參數(shù)指定返回記錄行的
最大數(shù)目。初始記錄行的偏移量是 0(而不是 1)。下面,我們針對(duì)特例對(duì)mysql分頁(yè)查詢進(jìn)行總結(jié)。
mysql提供分頁(yè)的功能:
SELECT * FROM table LIMIT [offset,] rows rows OFFSET offset
最簡(jiǎn)單的用法就是:
select * from table limit ?,?
這種是最簡(jiǎn)單的limit分頁(yè)查詢。配合where條件使用:
select * from table where column > ? order by id limit ?,?
上邊這種情況,建議在column和id建立復(fù)合索引比較好。
以上兩種情況,對(duì)于小數(shù)據(jù)量分頁(yè)查詢時(shí),這樣的sql就足夠用了。但是對(duì)于百萬(wàn)級(jí)以上的數(shù)據(jù)表,如果使用上邊的sql 的話,越往后limit語(yǔ)句的偏移量越來(lái)越大,查詢就會(huì)變得越來(lái)越慢。類似于:
select * from `user` where `cate`='陜西' order by id limit 100000,10
為了避免這種查詢,我們可以通過(guò)子查詢的方式來(lái)提高查詢效率。
select * from `user` where id >=(select * from `user` where `cate`='陜西' order by id limit 100000,1) and `cate`='陜西' limit 10
通過(guò)explain我們可以看出直接limit查詢和通過(guò)子查詢的差距:
直接limit查詢:
type | possible_keys | key | key_len | ref | rows | Extra |
---|
ALL | (NULL) | (NULL) | (NULL) | (NULL) | 4076607 |
子查詢分頁(yè)查詢:
type | possible_keys | key | key_len | ref | rows | Extra |
---|
PRIMARY | range | PRIMARY | PRIMARY | 4 | 2038331 | Using where |
SUBQUERY | index | (NULL) | PRIMARY | 4 | 4076663 | Using index |
可以看出,通過(guò)子查詢的方式,子查詢是在索引上進(jìn)行的,而普通的查詢是在數(shù)據(jù)文件上進(jìn)行的。 通常來(lái)說(shuō),索引文件要比數(shù)據(jù)文件小的多,所以操作索引文件更直接高效。
此外,還可以通過(guò)join分頁(yè)方式
SELECT * FROM `user` AS t1
JOIN (SELECT id FROM `user` ORDER BY id LIMIT 100000, 1) AS t2
WHERE t1.id <= t2.id ORDER BY t1.id LIMIT 10;
join分頁(yè)和子查詢分頁(yè)的效率基本在一個(gè)等級(jí)上。(但是,子查詢需要在內(nèi)存中建立臨時(shí)表,查詢完畢后,MySQL需要撤銷這些臨時(shí)表。通過(guò)join可以避免這種情況)在分頁(yè)查詢前,可以進(jìn)行判斷,如果是在限定頁(yè)數(shù)內(nèi),就使用基本分頁(yè)查詢,大于則使用子查詢分頁(yè)處理。
相關(guān)推薦:
mysql分頁(yè)性能探索
MySQL分頁(yè)優(yōu)化的測(cè)試案例
MySQL分頁(yè)性能優(yōu)化指南
以上就是mysql分頁(yè)查詢實(shí)例講解的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。