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

MySQL 分頁查詢的優(yōu)化技巧

 更新時間:2021年05月12日 10:30:10   作者:島上碼農(nóng)  
這篇文章主要介紹了MySQL 分頁查詢的優(yōu)化技巧,幫助大家更好的理解和學習使用MySQL,感興趣的朋友可以了解下

在有分頁查詢的應用中,包括 LIMIT 和 OFFSET 的查詢十分常見,而且?guī)缀趺總€都會有一個 ORDER BY 子句。如果使用索引排序的話將對性能優(yōu)化十分有幫助,否則服務端需要做很多文件排序。

一個高頻的問題是 offset 的值過大。如果查詢類似 LIMIT 10000, 20,將會產(chǎn)生10020行,并將之前的10000行丟棄,這樣的代價很高。假設所有的頁使用相同的頻次訪問,這樣的查詢將平均掃描一半數(shù)據(jù)表。為了優(yōu)化他們,你可以在分頁視圖中限制最多可訪問的頁數(shù),或者讓大便宜的查詢更有效。

一個改善性能簡單的技巧是在覆蓋索引上進行查詢操作而不是整行數(shù)據(jù)。你可以將結果與完整的行做一次聯(lián)合然后再獲取額外需要的列。這樣的效率會更高,例如下面的查詢:

SELECT film_id, description FROM sakila.film ORDER BY title LIMIT 50, 5;

如果數(shù)據(jù)表很大的話,則可以按下面的方式進行優(yōu)化:

SELECT film.film_id, film.description
FROM sakila.film
	INNER JOIN (
    SELECT film_id FROM sakila.film
    ORDER BY title LIMIT 50, 5)
  ) as lim USING(film_id);

這種“推斷聯(lián)合查詢”能夠有效工作是因為它使用了索引減少了服務端盡可能少地訪問數(shù)據(jù)行去檢查數(shù)據(jù)。一旦復核要求的行查到了,將他們與對應的數(shù)據(jù)表的行進行聯(lián)合查詢以獲取對應行的其他列。

有些時候也可以將 limit 轉換為固定位置的查詢,這種方式可以對索引進行范圍掃描完成。例如,如果你預先計算一個固定位置的列 稱之為 position,可以重寫查詢?nèi)缦拢?/p>

SELECT film_id, description FROM sakila.film
WHERE position BETWEEN 50 AND 54 ORDER BY position;

排序的數(shù)據(jù)也可以使用類似的方式解決,但是通常會被 GROUP BY操作影響。大部分情況下需要提前計算和存儲排序值。

LIMIT 和 OFFSET 真正的問題是在OFFSET,這意味著服務端會把很多數(shù)據(jù)行丟棄。如果使用一個有序書簽來記錄下次獲取行的位置的話,則可以從上次的位置開始訪問接下來的數(shù)據(jù)。例如,如果你需要對出租記錄進行分頁,從最新的出租記錄開始往回查詢,則可以依賴于記錄的主鍵是一直增加的,因此可以對第一頁數(shù)據(jù)這樣查詢:

SELECT * FROM sakila.rental
ORDER BY rental_id DESC LIMIT 20;

這個查詢返回16049到16030之間的數(shù)據(jù)。接下來的查詢可以從之前結束位置開始:

SELECT * FROM sakila.rental
WHERE rental_id < 16030 
ORDER BY rental_id DESC LIMIT 20;

這個技巧不管你從多遠的偏移值開始查詢都是很有效的。

其他的一些技巧包括使用預先計算的統(tǒng)計值,或者通過聯(lián)合冗余了主鍵和排序列的數(shù)據(jù)表進行查詢,這兩種方式都是通過空間換取時間的方式提高查詢效率。

以上就是MySQL 分頁查詢的優(yōu)化技巧的詳細內(nèi)容,更多關于MySQL 分頁查詢的優(yōu)化的資料請關注腳本之家其它相關文章!

相關文章

  • mysql中的存儲過程傳參問題

    mysql中的存儲過程傳參問題

    這篇文章主要介紹了mysql中的存儲過程傳參問題,具有很好的參考價值,希望對大家有所幫助,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 聊一聊MyISAM和InnoDB的區(qū)別

    聊一聊MyISAM和InnoDB的區(qū)別

    這篇文章主要介紹了聊一聊MyISAM和InnoDB的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • mysql命令行中執(zhí)行sql的幾種方式總結

    mysql命令行中執(zhí)行sql的幾種方式總結

    下面小編就為大家?guī)硪黄猰ysql命令行中執(zhí)行sql的幾種方式總結。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • Mysql中的超時時間設置方式

    Mysql中的超時時間設置方式

    這篇文章主要介紹了Mysql中的超時時間設置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 基于Php mysql存儲過程的詳解

    基于Php mysql存儲過程的詳解

    本篇文章是對Php中的mysql存儲過程進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Mysql中的事務是什么如何使用

    Mysql中的事務是什么如何使用

    事務是邏輯上的一組操作,組成這組操作的各個單元,要不全都成功要不全都失敗,這個特性就是事務,下面為大家介紹下Mysql中的事務的具體使用
    2013-12-12
  • Windows下通過DOS命令登錄MYSQL的方法

    Windows下通過DOS命令登錄MYSQL的方法

    這篇文章主要介紹了Windows下通過DOS命令登錄MYSQL的方法,方法很簡單,本文給出了詳細操作步驟,需要的朋友可以參考下
    2015-05-05
  • MySQL8.0安裝中遇到的3個小錯誤總結

    MySQL8.0安裝中遇到的3個小錯誤總結

    這篇文章主要給大家總結介紹了關于MySQL8.0安裝中遇到的3個小錯誤的相關資料,文中通過圖文以及示例代碼介紹的非常詳細,對大家學習或者使用mysql8.0具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • 淺談選擇mysql存儲引擎的標準

    淺談選擇mysql存儲引擎的標準

    本文介紹了如何選擇mysql存儲引擎,從存儲引擎的介紹、幾個常用引擎的特點三個方面進行講解,感興趣的小伙伴們可以參考一下
    2015-07-07
  • MySQL如何修改字段類型和字段長度

    MySQL如何修改字段類型和字段長度

    這篇文章主要介紹了MySQL如何修改字段類型和字段長度,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論

湘西| 淮滨县| 微山县| 九台市| 神木县| 平陆县| 海林市| 望江县| 屯留县| 宜兰市| 东港市| 丰宁| 满城县| 潼关县| 会泽县| 内江市| 武城县| 盱眙县| 侯马市| 金川县| 老河口市| 上高县| 左权县| 昭通市| 福州市| 定州市| 太仓市| 汶川县| 达日县| 沈丘县| 夹江县| 唐海县| 桦川县| 博爱县| 察隅县| 长乐市| 诏安县| 霸州市| 会昌县| 高清| 奉新县|