最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中SQL分頁(yè)查詢的幾種實(shí)現(xiàn)方法及優(yōu)缺點(diǎn)

 更新時(shí)間:2020年07月15日 11:40:04   作者:十九畫(huà)生  
這篇文章主要介紹了MySQL中SQL分頁(yè)查詢的幾種實(shí)現(xiàn)方法及優(yōu)缺點(diǎn), 分頁(yè)查詢就是在滿足條件的一堆有序數(shù)據(jù)中截取當(dāng)前所需要展示的那部分。對(duì)此感興趣的可以來(lái)了解一下

【SQL】SQL分頁(yè)查詢總結(jié)

開(kāi)發(fā)過(guò)程中經(jīng)常遇到分頁(yè)的需求,今天在此總結(jié)一下吧。

簡(jiǎn)單說(shuō)來(lái)方法有兩種,一種在源上控制,一種在端上控制。源上控制把分頁(yè)邏輯放在SQL層;端上控制一次性獲取所有數(shù)據(jù),把分頁(yè)邏輯放在UI上(如GridView)。顯然,端上控制開(kāi)發(fā)難度低,適于小規(guī)模數(shù)據(jù),但數(shù)據(jù)量增大時(shí)性能和IO消耗無(wú)法接受;源上控制在性能和開(kāi)發(fā)難度上較為平衡,適應(yīng)大多數(shù)業(yè)務(wù)場(chǎng)景;除此之外,還可以根據(jù)客觀情況(性能要求,源與端的資源占用等)在源和端之間加一層,應(yīng)用特殊算法和技術(shù)進(jìn)行處理。以下主要討論源上,即SQL上的分頁(yè)。

分頁(yè)的問(wèn)題其實(shí)就是在滿足條件的一堆有序數(shù)據(jù)中截取當(dāng)前所需要展示的那部分。實(shí)際上各種數(shù)據(jù)庫(kù)都考慮到分頁(yè)問(wèn)題而內(nèi)置了一些策略,比如MySql的LIMIT,Oracle的ROWNUM和ROW_NUMBER(),SqlServer的TOP和ROW_NUMBER(),基于此我們可以得到一系列分頁(yè)的方法。

1、 基于MySql的LIMIT和Oracle的ROWNUM,可以直接限制返回區(qū)間(以MySql為例,注意使用Oracle的ROWNUM時(shí)要應(yīng)用子查詢):

方法一、直接限制返回區(qū)間

SELECT * FROM table WHERE 查詢條件 ORDER BY 排序條件 LIMIT ((頁(yè)碼-1)*頁(yè)大小),頁(yè)大小;

優(yōu)點(diǎn):寫(xiě)法簡(jiǎn)單。
缺點(diǎn):當(dāng)頁(yè)碼和頁(yè)大小過(guò)大時(shí),性能明顯下降。
適用:數(shù)據(jù)量不大。

2、基于LIMIT(MySql)、ROWNUM(Oracle)和TOP(SqlServer),他們可以限制返回的行數(shù),因此可以得到以下兩套通用的方法(以SqlServer為例):

方法二、NOT IN

SELECT TOP 頁(yè)大小 * FROM table WHERE 主鍵 NOT IN
(
 SELECT TOP (頁(yè)碼-1)*頁(yè)大小 主鍵 FROM table WHERE 查詢條件 ORDER BY 排序條件
)
ORDER BY 排序條件

優(yōu)點(diǎn):通用性強(qiáng)。
缺點(diǎn):當(dāng)數(shù)據(jù)量較大時(shí)向后翻頁(yè),NOT IN中的數(shù)據(jù)過(guò)大會(huì)影響性能。
適用:數(shù)據(jù)量不大。

方法三、MAX

SELECT TOP 頁(yè)大小 * FROM table WHERE 查詢條件 AND id >
(
 SELECT ISNULL(MAX(id),0) FROM 
 (
  SELECT TOP ((頁(yè)碼-1)*頁(yè)大小) id FROM table WHERE 查詢條件 ORDER BY id 
 ) AS tempTable
) 
ORDER BY id

優(yōu)點(diǎn):速度快,特別是當(dāng)id為主鍵時(shí)。
缺點(diǎn):適用面窄,要求排序條件單一且可比較。
適用:簡(jiǎn)單排序(特殊情況也可嘗試轉(zhuǎn)換成類似可比較值處理)。

3、基于SqlServer和Oracle的ROW_NUMBER(),可以得到返回?cái)?shù)據(jù)的行號(hào),基于此在限制返回區(qū)間得到如下方法(以SqlServer為例):

方法四、ROW_NUMBER()

SELECT TOP 頁(yè)大小 * FROM 
(
 SELECT TOP (頁(yè)碼*頁(yè)大小) ROW_NUMBER() OVER (ORDER BY 排序條件) AS RowNum, * FROM table WHERE 查詢條件
) AS tempTable
WHERE RowNum BETWEEN (頁(yè)碼-1)*頁(yè)大小+1 AND 頁(yè)碼*頁(yè)大小
ORDER BY RowNum

優(yōu)點(diǎn):在數(shù)據(jù)量較大時(shí)相比NOT IN有優(yōu)勢(shì)。
缺點(diǎn):小數(shù)據(jù)量時(shí)不如NOT IN。
適用:大部分分頁(yè)查詢需求。

以上是自己總結(jié)的拙見(jiàn),性能比較來(lái)自網(wǎng)上資料及個(gè)人判斷,并沒(méi)有深入實(shí)驗(yàn),不當(dāng)之處請(qǐng)大家指正。

到此這篇關(guān)于MySQL中分頁(yè)查詢的幾種實(shí)現(xiàn)方法及優(yōu)缺點(diǎn)的文章就介紹到這了,更多相關(guān)MySQL中分頁(yè)查詢的方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家

相關(guān)文章

  • mysql跨服務(wù)查詢之FEDERATED存儲(chǔ)引擎的實(shí)現(xiàn)

    mysql跨服務(wù)查詢之FEDERATED存儲(chǔ)引擎的實(shí)現(xiàn)

    本文主要介紹了mysql跨服務(wù)查詢之FEDERATED存儲(chǔ)引擎的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • mysql的MVCC多版本并發(fā)控制的實(shí)現(xiàn)

    mysql的MVCC多版本并發(fā)控制的實(shí)現(xiàn)

    這篇文章主要介紹了mysql的MVCC多版本并發(fā)控制的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 數(shù)據(jù)庫(kù)性能測(cè)試之sysbench工具的安裝與用法詳解

    數(shù)據(jù)庫(kù)性能測(cè)試之sysbench工具的安裝與用法詳解

    sysbench是一個(gè)很不錯(cuò)的數(shù)據(jù)庫(kù)性能測(cè)試工具,這篇文章主要給大家介紹了關(guān)于數(shù)據(jù)庫(kù)性能測(cè)試之sysbench工具的安裝與用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • MySQL表內(nèi)連和外連的具體使用

    MySQL表內(nèi)連和外連的具體使用

    我們?cè)谑褂肕ySQL的時(shí)候,經(jīng)常涉及到內(nèi)連接和外連接的應(yīng)用,本文就來(lái)詳細(xì)的介紹一下MySQL表內(nèi)連和外連的具體使用,感興趣的可以了解一下
    2023-10-10
  • MySQL示例DTID主從原理解析

    MySQL示例DTID主從原理解析

    這篇文章主要介紹了MySQL示例DTID主從原理解析,其實(shí)包含了詳細(xì)的使用方法說(shuō)明,有需要的朋友可以借鑒參考下,希望可以有所幫助,感謝閱讀
    2021-09-09
  • MySQL8.0修改Root密碼的方法步驟

    MySQL8.0修改Root密碼的方法步驟

    MySQL在初次安裝之后默認(rèn)設(shè)置了root用戶的密碼,對(duì)于一些情況下需要修改root用戶密碼的操作,本文主要介紹了MySQL8.0修改Root密碼的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • k8s搭建mysql集群實(shí)現(xiàn)主從復(fù)制的方法步驟

    k8s搭建mysql集群實(shí)現(xiàn)主從復(fù)制的方法步驟

    本文是基于已有k8s環(huán)境下,介紹在k8s環(huán)境中部署mysql主從集群的實(shí)現(xiàn)步驟,對(duì)mysql學(xué)習(xí)有一定的幫助,感興趣的可以學(xué)習(xí)一下
    2023-01-01
  • linux mysql 安裝與操作

    linux mysql 安裝與操作

    mysql是linux平臺(tái)下最流行的數(shù)據(jù)庫(kù)系統(tǒng),今天介紹的是mysql的安裝及簡(jiǎn)單的操作方法!
    2009-06-06
  • 在MySQL中如何存取List<String>數(shù)據(jù)

    在MySQL中如何存取List<String>數(shù)據(jù)

    這篇文章主要介紹了在MySQL中如何存取List<String>數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • MySQL的23個(gè)需要注意的地方

    MySQL的23個(gè)需要注意的地方

    本文將為大家介紹的是MySQL數(shù)據(jù)庫(kù)的23個(gè)特別注意事項(xiàng),希望各位DBA能從中得到一些啟發(fā)。
    2010-08-08

最新評(píng)論

弥勒县| 将乐县| 宿松县| 刚察县| 新野县| 左云县| 肃宁县| 固原市| 普宁市| 滨海县| 东丽区| 祥云县| 封开县| 辽阳县| 恩平市| 阳原县| 宾阳县| 黑龙江省| 巴里| 中江县| 泗阳县| 华池县| 浮山县| 湘潭县| 马公市| 承德市| 阳谷县| 长沙县| 陆河县| 西林县| 台东市| 浮山县| 买车| 湖口县| 吴旗县| 满洲里市| 呼玛县| 盘山县| 疏附县| 夏河县| 广东省|