Mysql 分頁語句Limit用法

Mysql 分頁語句Limit用法

1、Mysql的limit用法

?

在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行數據,這個時候怎么辦呢?不用擔心,mysql已經為我們提供了這樣一個功能。

?

Sql代碼??收藏代碼
  1. SELECT?*?FROM?table?LIMIT?[offset,]?rows?|?rows?OFFSET?offset??

?

LIMIT 子句可以被用于強制 SELECT 語句返回指定的記錄數。LIMIT 接受一個或兩個數字參數。參數必須是一個整數常量。如果給定兩個參數,第一個參數指定第一個返回記錄行的偏移量,第二個參數指定返回記錄行的最大數目。初始記錄行的偏移量是 0(而不是 1): 為了與 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

?

Sql代碼??收藏代碼
  1. mysql>?SELECT?*?FROM?table?LIMIT?5,10;?//?檢索記錄行?6-15??
  2. ??
  3. //為了檢索從某一個偏移量到記錄集的結束所有的記錄行,可以指定第二個參數為?-1:???
  4. mysql>?SELECT?*?FROM?table?LIMIT?95,-1;?//?檢索記錄行?96-last.??
  5. ??
  6. //如果只給定一個參數,它表示返回最大的記錄行數目:???
  7. mysql>?SELECT?*?FROM?table?LIMIT?5;?//檢索前?5?個記錄行??
  8. ??
  9. //換句話說,LIMIT?n?等價于?LIMIT?0,n。??

?

? ? 【引用,路人乙:Mysql中limit的用法詳解】

?

2、Mysql的分頁查詢語句的性能分析

?

?

  ? ? MySql分頁sql語句,如果和MSSQL的TOP語法相比,那么MySQL的LIMIT語法要顯得優雅了許多。使用它來分頁是再自然不過的事情了。

?

2.1最基本的分頁方式:

?

Sql代碼??收藏代碼
  1. ???
  2. SELECT?...?FROM?...?WHERE?...?ORDER?BY?...?LIMIT?...??

??

在中小數據量的情況下,這樣的SQL足夠用了,唯一需要注意的問題就是確保使用了索引:

舉例來說,如果實際SQL類似下面語句,那么在category_id, id兩列上建立復合索引比較好:

?

Sql代碼??收藏代碼
  1. SELECT?*?FROM?articles?WHERE?category_id?=?123?ORDER?BY?id?LIMIT?50,?10??

??

?

2.2子查詢的分頁方式:

?

隨著數據量的增加,頁數會越來越多,查看后幾頁的SQL就可能類似:

Sql代碼??收藏代碼
  1. SELECT?*?FROM?articles?WHERE?category_id?=?123?ORDER?BY?id?LIMIT?10000,?10??

??

一言以蔽之,就是越往后分頁,LIMIT語句的偏移量就會越大,速度也會明顯變慢。

此時,我們可以通過子查詢的方式來提高分頁效率,大致如下:

Sql代碼??收藏代碼
  1. SELECT?*?FROM?articles?WHERE??id?>=??
  2. ?(SELECT?id?FROM?articles??WHERE?category_id?=?123?ORDER?BY?id?LIMIT?10000,?1)?LIMIT?10??

?

?

2.3JOIN分頁方式

?

Sql代碼??收藏代碼
  1. SELECT?*?FROM?`content`?AS?t1???
  2. JOIN?(SELECT?id?FROM?`content`?ORDER?BY?id?desc?LIMIT?".($page-1)*$pagesize.",?1)?AS?t2???
  3. WHERE?t1.id?<=?t2.id?ORDER?BY?t1.id?desc?LIMIT?$pagesize;???

??

? ? ?經過我的測試,join分頁和子查詢分頁的效率基本在一個等級上,消耗的時間也基本一致。

explain SQL語句:

id select_type table type possible_keys key key_len ref rows Extra

1 PRIMARY <derived2> system NULL NULL NULL NULL 1 ?

1 PRIMARY t1 range PRIMARY PRIMARY 4 NULL 6264 Using where

2 DERIVED content index NULL PRIMARY 4 NULL 27085 Using index

?

----------------------------------------

?

為什么會這樣呢?因為子查詢是在索引上完成的,而普通的查詢時在數據文件上完成的,通常來說,索引文件要比數據文件小得多,所以操作起來也會更有效率。

?

實際可以利用類似策略模式的方式去處理分頁,比如判斷如果是一百頁以內,就使用最基本的分頁方式,大于一百頁,則使用子查詢的分頁方式。

【引用原文,energy1010的空間:MySql分頁sql語句】

?

?

3、Oracle分頁查詢語句

Oralce數據庫?

從數據庫表中第M條記錄開始檢索N條記錄?

Sql代碼??收藏代碼
  1. SELECT?*?FROM?(SELECT?ROWNUM?r,t1.*?From?表名稱?t1?where?rownum?<?M?+?N)?t2???
  2. ?where?t2.r?>=?M???

?? 例如從表Sys_option(主鍵為sys_id)中從第10條記錄開始檢索20條記錄,語句如下:?

Sql代碼??收藏代碼
  1. SELECT?*?FROM?(SELECT?ROWNUM?R,t1.*?From?Sys_option?where?rownum?<?30?)?t2???
  2. Where?t2.R?>=?10???

??

3、MSSQLSERVER分頁查詢語句

?

SQL Server主要利用?SELECT TOP語句分頁,具體方案,請參考

?

-------------------------------------?

?

分頁方案一:(利用Not In和SELECT TOP分頁)?

語句形式:?

?

Sql代碼??收藏代碼
  1. SELECT?TOP?10?*???
  2. FROM?TestTable???
  3. WHERE?(ID?NOT?IN???
  4. (SELECT?TOP?20?id???
  5. FROM?TestTable???
  6. ORDER?BY?id))???
  7. ORDER?BY?ID???

? ?

Sql代碼??收藏代碼
  1. SELECT?TOP?頁大小?*???
  2. FROM?TestTable???
  3. WHERE?(ID?NOT?IN???
  4. (SELECT?TOP?頁大小*頁數?id???
  5. FROM?表???
  6. ORDER?BY?id))???
  7. ORDER?BY?ID???
  8. SELECT?TOP?頁大小?*???
Sql代碼??收藏代碼
  1. FROM?TestTable???
  2. WHERE?(ID?>???
  3. (SELECT?MAX(id)???
  4. FROM?(SELECT?TOP?頁大小*頁數?id???
  5. FROM?表???
  6. ORDER?BY?id)?AS?T))???
  7. ORDER?BY?ID???

??

-------------------------------------?

?

分頁方案二:(利用ID大于多少和SELECT TOP分頁)?

語句形式:?

Sql代碼??收藏代碼
  1. SELECT?TOP?10?*???
  2. FROM?TestTable???
  3. WHERE?(ID?>???
  4. (SELECT?MAX(id)???
  5. FROM?(SELECT?TOP?20?id???
  6. FROM?TestTable???
  7. ORDER?BY?id)?AS?T))???
  8. ORDER?BY?ID???

??

-------------------------------------?

分頁方案三:(利用SQL的游標存儲過程分頁)?

?

Sql代碼??收藏代碼
  1. create?procedure?XiaoZhengGe???
  2. @sqlstr?nvarchar(4000),?--查詢字符串???
  3. @currentpage?int,?--第N頁???
  4. @pagesize?int?--每頁行數???
  5. as???
  6. set?nocount?on???
  7. declare?@P1?int,?--P1是游標的id???
  8. @rowcount?int???
  9. exec?sp_cursoropen?@P1?output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount?output???
  10. select?ceiling(1.0*@rowcount/@pagesize)?as?總頁數--,@rowcount?as?總行數,@currentpage?as?當前頁???
  11. set?@currentpage=(@currentpage-1)*@pagesize+1???
  12. exec?sp_cursorfetch?@P1,16,@currentpage,@pagesize???
  13. exec?sp_cursorclose?@P1???
  14. set?nocount?off???

??

其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。?

建議優化的時候,加上主鍵和索引,查詢效率會提高。?

?

通過SQL 查詢分析器,顯示比較:我的結論是:?

分頁方案二:(利用ID大于多少和SELECT TOP分頁)效率最高,需要拼接SQL語句?

分頁方案一:(利用Not In和SELECT TOP分頁) 效率次之,需要拼接SQL語句?

分頁方案三:(利用SQL的游標存儲過程分頁) 效率最差,但是最為通用?

?

在實際情況中,要具體分析。?

?

【引用:在SQL Server中通過SQL語句實現分頁查詢?】

轉載于:https://www.cnblogs.com/handsome1013/p/5242871.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373564.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373564.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373564.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sqlmap指定cookie_利用SQLMap進行cookie注入

SQLMap被稱為注入神器&#xff0c;N多大神都使用SQLmap來進行注入測試&#xff0c;我等小菜當然也會用來裝一下A*C&#xff0c;用了N久SQLMAP了&#xff0c;但是極少用 到cookie注入&#xff0c;一遇到cookie注入就去使用注入中轉工具&#xff0c;比較麻煩。剛好今天群里的USB問…

c語言else匹配問題

1 #include <stdio.h>2 #include <stdlib.h>3 4 //實現 依次輸入三個遞增的數 然后正確輸出5 6 //為什么得不到我們想要的結果呢 這就是else匹配的問題 當然了 在編譯器里面他會自動給你匹配7 //但是如果沒有了編譯器 筆試的時候呢。。。。8 //原因為&#xff1a;e…

Java:偽造工廠的閉包以創建域對象

最近&#xff0c;我們想要創建一個域對象&#xff0c;該對象需要具有外部依賴關系才能進行計算&#xff0c;并且希望能夠在測試中解決該依賴關系。 最初&#xff0c;我們只是在領域類中新建依賴項&#xff0c;但這使得無法在測試中控制其值。 同樣&#xff0c;我們似乎不應該將…

利用scp 遠程上傳下載文件/文件夾

利用scp傳輸文件 1、從服務器下載文件 scp usernameservername:/path/filename /tmp/local_destination 例如scp codinglog192.168.0.101:/home/kimi/test.txt 把192.168.0.101上的/home/kimi/test.txt 的文件下載到 /tmp/local_destination 2、上傳本地文件到服務器 scp /…

KEIL編譯錯誤總結:

1 expected an identifier&#xff1a;#define宏定義常量后&#xff0c;如果再用前面定義的常量作為枚舉常量就會報錯&#xff0c;方法&#xff0c;去掉#define宏定義 2 ERROR L118: REFERENCE MADE TO ERRONEOUS EXTERNAL 定義的變量和外部聲明調用的變量存儲類型不一致&#…

視覺平衡與物理平衡_設計中的平衡理論為什么這么重要?

原標題&#xff1a;設計中的平衡理論為什么這么重要&#xff1f;在平面設計中很重要的理論就是關于平衡的應用。無論在logo設計還是網頁設計還是海報設計中&#xff0c;一個好的設計一定會兼顧視覺的平衡。今天123標志網就跟大家一起看看平衡的力量。構圖平衡主要意味著調整設計…

Tomcat、JDK 歷史版本下載地址

Tomcat 歷史版本下載地址http://archive.apache.org/dist/tomcat/ JDK 歷史版本下載地址 https://www.oracle.com/technetwork/java/javase/archive-139210.html 個人博客&#xff1a;學習園 原文地址&#xff1a;http://www.xuexiyuan.cn/article/detail/190.html

JavaFX移動應用程序最佳實踐,第2部分

警告&#xff1a;我在這里給出的技巧對于JavaFX Mobile的當前版本是正確的&#xff0c;該版本是JavaFX 1.1 SDK的一部分。 在將來的版本中&#xff0c;行為將改變&#xff0c;上述工件的當前不良性能將被優化或至少得到顯著改善。 我在這里寫的所有內容都是快照&#xff0c;不應…

14軟件工程第一次作業

你認為一些軍事方面的軟件系統采用什么樣的開發模型比較合適&#xff1f; 我認為設計軍事方面的軟件采用螺旋式的開發模型比較好。因為螺旋模型減少了過多測試或者是測試不足所帶來的風險&#xff0c;能夠使軟件在無法排除重大風險時有機會停止&#xff0c;減少損失。對于軍事方…

波紋擴散_C4D_動畫amp;RS波紋擴散效果J_014

C4D-效果擴散效果&#xff0c;Redshift混合冰材質&#xff1b;利用頂點貼圖擴散效果制作&#xff0c;RS混合調用頂點貼圖。視頻教程時長22分鐘。對象為可編輯對象才能用頂點貼圖。冰結域的擴展是這個動畫的重點&#xff0c;在這個模式下&#xff0c;權重會根據半徑向外擴展&…

軟件測試工程師簡歷項目經驗怎么寫?--9999個已成功入職的軟件測試工程師真實簡歷

簡歷是我們求職的第一步&#xff0c;也是非常重要的一步。 青云叔叔看過太多簡歷&#xff0c;最快3秒就淘汰一份簡歷&#xff0c;因為其實我們每天要收到很多簡歷進行篩選&#xff0c;那么面試官其實也是會很快進行對簡歷進行判斷的&#xff0c;如果你對簡歷寫的一塌糊涂&…

【poj2464】樹狀數組

這道題。。太特么多細節了。。 題意&#xff1a;在平面直角坐標系中給你N個點&#xff0c;stan和ollie玩一個游戲&#xff0c;首先stan在豎直方向上畫一條直線&#xff0c;該直線必須要過其中的某個點&#xff0c;然后ollie在水平方向上畫一條直線&#xff0c;該直線的要求是要…

mkdir -p命令

如果要創建目錄A并創建目錄A的子目錄B&#xff0c;沒有用-p的情況下mkdir 逐個的創建目錄(mkdir A && mkdir A/B); 如果用-p 可以直接創建2個目錄 mkdir -p A/B(如果父目錄A不存在就創建); 來自個人博客&#xff1a; http://www.xuexiyuan.cn/article/detail/182.html

Eclipse在過去十年中的主要成就

正如我所寫的那樣 &#xff0c;Eclipse在11月慶祝了10年來的開源和社區。 Eclipse社區已經形成了許多里程碑 &#xff0c;但是主要成就是什么&#xff1f; Eclipse為實際改變軟件行業做了什么&#xff1f; 這是Eclipse的一些關鍵成就。 1.主導的Java IDE。 Eclipse最初是一個非…

azure git怎么使用_Azure(一)Azure Traffic Manager為我們的Web項目提供負載均衡

一&#xff0c;引言上一篇講到我們將自己的Net Core Web 項目部署到 Azure 的 Web App 的一項 pass 服務&#xff0c;假如隨著項目的日益增長的訪問量&#xff0c;之前部署到單節點的應用可能無法保證其穩定性&#xff0c;可能會導致系統宕機等等問題&#xff0c;這個時候&…

hiho1257 Snake Carpet

題目鏈接&#xff1a;http://hihocoder.com/problemset/problem/1257 題目大意&#xff1a;有n條蛇 編號為1-n 每條蛇的長度跟編號相等 奇數編號的蛇必須拐奇數次&#xff08;除了第一條&#xff09;偶數編號的蛇必須拐偶數次&#xff08;除了第二條&#xff09;問能不能在這種…

POJ 3680_Intervals

題意&#xff1a; 給定區間和該區間對應的權值&#xff0c;挑選一些區間&#xff0c;求使得每個數都不被K個區間覆蓋的最大權值和。 分析&#xff1a; 如果K1&#xff0c;即為區間圖的最大權獨立集問題。可以對區間所有端點排序后利用動態規劃的方法&#xff0c;設dp[i]為只考慮…

MongoDB 數據類型查詢——$type使用

在MongoDB中根據字段的數量類型來查詢數據使用$type操作符來實現&#xff0c;具體使用法語&#xff1a;1db.集合名.find({$type:類型值}) //這里的類型值能使用Number也能使用alias舉個例子&#xff1a;12db.person.find({address:{$type:2}}) //查詢address字段數據…

Spring和JSF集成:MVC螺母和螺栓

過去&#xff0c;我曾嘗試將JSF與Spring MVC集成在一起&#xff0c;盡管我的第一次嘗試成功了&#xff0c;但這遠非理想。 這次&#xff0c;我決定做出一些關鍵決定來幫助我集中精力&#xff1a; 向后兼容。 支持JSF 1.2涉及的工作太多&#xff0c;而Spring 3.1中出現了太多的好…

文字描邊_如何在網頁里實現文字描邊效果

文字描邊想要在網頁里實現文本描邊效果&#xff0c;在以前只能使用Photoshop等來實現&#xff0c;但現在只需要一個text-stroke屬性&#xff0c;即可輕松做到文本描邊&#xff0c;漸變文本描邊&#xff0c;甚至圖片文本描邊。01語法text-stroke: text-stroke是一個復合屬性&…