您好,登錄后才能下訂單哦!
這篇文章主要講解了“mysql分頁(yè)查詢語(yǔ)句的具體用法”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“mysql分頁(yè)查詢語(yǔ)句的具體用法”吧!
SQL Server
關(guān)于分頁(yè) SQL 的資料許多,有的使用存儲(chǔ)過(guò)程,有的使用游標(biāo)。本人不喜歡使用游標(biāo),我覺(jué)得它耗資、效率低;使用存儲(chǔ)過(guò)程是個(gè)不錯(cuò)的選擇,因?yàn)榇鎯?chǔ)過(guò)程是顛末預(yù)編譯的,執(zhí)行效率高,也更靈活。先看看單條 SQL 語(yǔ)句的分頁(yè) SQL 吧。
方法1:
適用于 SQL Server 2000/2005
SELECT TOP 頁(yè)大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 頁(yè)大小*(頁(yè)數(shù)-1) id FROM table1 ORDER BY id ) ORDER BY id
方法2:
適用于 SQL Server 2000/2005
SELECT TOP 頁(yè)大小 * FROM table1 WHERE id > ( SELECT ISNULL(MAX(id),0) FROM ( SELECT TOP 頁(yè)大小*(頁(yè)數(shù)-1) id FROM table1 ORDER BY id ) A ) ORDER BY id
方法3:
適用于 SQL Server 2005
SELECT TOP 頁(yè)大小 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1 ) A WHERE RowNumber > 頁(yè)大小*(頁(yè)數(shù)-1)
說(shuō)明,頁(yè)大?。好宽?yè)的行數(shù);頁(yè)數(shù):第幾頁(yè)。使用時(shí),請(qǐng)把“頁(yè)大小”以及“頁(yè)大小*(頁(yè)數(shù)-1)”替換成數(shù)碼。
MYSQL
SELECT * FROM TT LIMIT 1,20
SELECT * FROM TT LIMIT 21,30
/*
如果你是幾千上萬(wàn)數(shù)據(jù),就直接使用mysql自帶的函數(shù) limit的普通用法就ok了,如果是100萬(wàn)以上的數(shù)據(jù),可能就要講方法了,下面我們來(lái)做個(gè)百萬(wàn)級(jí)數(shù)據(jù)的分頁(yè)查詢語(yǔ)句.
mysql> select * from news where id>=(select id from news limit 490000,1) limit 10; //0.18 sec //很 明顯,這 種方式勝出 .
mysql> select * from news limit 490000,10 //0.22 sec;
*/
以下的文章主要介紹的是MySQL分頁(yè)的實(shí)際操作方案,其實(shí)關(guān)于實(shí)現(xiàn)MySQL分頁(yè)的最簡(jiǎn)單的方法就是利用利用mysql的LIMIT函數(shù),LIMIT [offset,] rows可以從MySQL數(shù)據(jù)庫(kù)表中第M條記錄開(kāi)始檢索N條記錄的語(yǔ)句為:
SELECT * FROM 表名稱 LIMIT M,N
例如從表Sys_option(主鍵為sys_id)中從第10條記錄開(kāi)始檢索20條記錄,語(yǔ)句如下:
select * from sys_option limit 10,20
select * from table [查詢條件] order by id limit ?,?
Oracle的分頁(yè)查詢語(yǔ)句基本上可以按照這篇了,下一篇文章會(huì)通過(guò)例子來(lái)申述。下面簡(jiǎn)單討論一下多表聯(lián)合的情況。對(duì)最多見(jiàn)的等值表連接查詢,CBO 一般可能會(huì)采用兩種連接方式NESTED LOOP以及HASH JOIN(MERGE JOIN效率比HASH JOIN效率低,一般CBO不會(huì)考慮)。在這里,由于使用了分頁(yè),因此指定了一個(gè)歸回的最大記載數(shù),NESTED LOOP在歸回記載數(shù)跨越最大值時(shí)可以頓時(shí)遏制并將結(jié)果歸回給中心層,而HASH JOIN必需處理完所有成集(MERGE JOIN也是)。那么在大部分的情況下,對(duì)分頁(yè)查詢選擇NESTED LOOP作為查詢的連接方法具有較高的效率(分頁(yè)查詢的時(shí)候絕大部分的情況是查詢前幾頁(yè)的數(shù)據(jù),越靠后面的頁(yè)數(shù)訪問(wèn)概率越小)。
因此,如果不介意在體系中使用HINT的話,可以將分頁(yè)的查詢語(yǔ)句改寫(xiě)為:
SELECT /*+ FIRST_ROWS */ * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
感謝各位的閱讀,以上就是“mysql分頁(yè)查詢語(yǔ)句的具體用法”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)mysql分頁(yè)查詢語(yǔ)句的具體用法這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。