亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

一個改善性能簡單的技巧是在覆蓋索引上進行查詢操作而不是整行數(shù)據(jù)。你可以將結(jié)果與完整的行做一次聯(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)合查詢”能夠有效工作是因為它使用了索引減少了服務(wù)端盡可能少地訪問數(shù)據(jù)行去檢查數(shù)據(jù)。一旦復核要求的行查到了,將他們與對應(yīng)的數(shù)據(jù)表的行進行聯(lián)合查詢以獲取對應(yīng)行的其他列。

有些時候也可以將 limit 轉(zhuǎn)換為固定位置的查詢,這種方式可以對索引進行范圍掃描完成。例如,如果你預先計算一個固定位置的列 稱之為 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,這意味著服務(wù)端會把很多數(shù)據(jù)行丟棄。如果使用一個有序書簽來記錄下次獲取行的位置的話,則可以從上次的位置開始訪問接下來的數(shù)據(jù)。例如,如果你需要對出租記錄進行分頁,從最新的出租記錄開始往回查詢,則可以依賴于記錄的主鍵是一直增加的,因此可以對第一頁數(shù)據(jù)這樣查詢:

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

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

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)容,更多關(guān)于MySQL 分頁查詢的優(yōu)化的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Ubuntu配置Mysql主從數(shù)據(jù)庫

    Ubuntu配置Mysql主從數(shù)據(jù)庫

    MySQL數(shù)據(jù)庫支持數(shù)據(jù)庫的主從復制功能,因此在集群方面具有其獨特的優(yōu)勢。眾多國內(nèi)外大型網(wǎng)站架構(gòu)體系中,均采用了MySQL的主從數(shù)據(jù)庫配置來實現(xiàn)查詢負載、數(shù)據(jù)庫熱備等功能。本人在實際的Web項目中也涉及到這一需求,在此將如何配置實現(xiàn)做個簡單小結(jié)。
    2014-07-07
  • windows server2014 安裝 Mysql Applying Security出錯的完美解決方法

    windows server2014 安裝 Mysql Applying Security出錯的完美解決方法

    這篇文章給大家介紹了windows server2014 安裝 Mysql Applying Security出錯的完美解決方法,造成這種問題的主要原因是因為安裝一遍之后沒有卸載干凈,要解決這個問題需要注意以下幾點,具體解決方法,大家參考下本文
    2017-07-07
  • 簡單了解mysql InnoDB MyISAM相關(guān)區(qū)別

    簡單了解mysql InnoDB MyISAM相關(guān)區(qū)別

    這篇文章主要介紹了簡單了解mysql InnoDB MyISAM相關(guān)區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • 全面了解MySql中的事務(wù)

    全面了解MySql中的事務(wù)

    下面小編就為大家?guī)硪黄媪私釳ySql中的事務(wù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • MySQL數(shù)據(jù)庫的高可用方案總結(jié)

    MySQL數(shù)據(jù)庫的高可用方案總結(jié)

    這篇文章主要針對MySQL數(shù)據(jù)庫的高可用方案進行詳細總結(jié),高可用架構(gòu)對于互聯(lián)網(wǎng)服務(wù)基本是標,本文是對各種方案的總結(jié),感興趣的小伙伴們可以參考一下
    2016-05-05
  • mysql 獲取當天發(fā)布的信息的語句

    mysql 獲取當天發(fā)布的信息的語句

    mysql 獲取當天發(fā)布的信息的實現(xiàn)語句,需要的朋友可以參考下。
    2010-03-03
  • NaviCat連接時提示"不支持遠程連接的MySql數(shù)據(jù)庫"解決方法

    NaviCat連接時提示"不支持遠程連接的MySql數(shù)據(jù)庫"解決方法

    前段時間,因為一項目,需要做MYSql的數(shù)據(jù)同步服務(wù),但由于網(wǎng)站空間服務(wù)供應(yīng)商不提供遠程連接MYSql,所以無法利用NaviCat客戶端通過填寫服務(wù)器地址來連接遠程服務(wù)器,在網(wǎng)上找到了SSH方式連接,但經(jīng)過測試后發(fā)現(xiàn)依舊無法連接。
    2011-08-08
  • MySQL導入導出助手類庫MysqlHelper安裝使用

    MySQL導入導出助手類庫MysqlHelper安裝使用

    這篇文章主要為大家介紹了MySQL導入導出助手類庫MysqlHelper安裝使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • 詳解MySQL中表的內(nèi)外連接

    詳解MySQL中表的內(nèi)外連接

    這篇文章主要為大家介紹了MySQL中表的內(nèi)外連接的相關(guān)知識,文中通過示例代碼介紹的非常詳細,具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • MySQL自增ID用完的幾種解決方案

    MySQL自增ID用完的幾種解決方案

    MySQL的自增ID(AUTO_INCREMENT)用完之后,會出現(xiàn)重復ID的問題,那么如何解決這個問題呢,接下本文就給大家介紹MySQL自增ID用完的幾種解決方案,需要的朋友可以參考下
    2023-07-07

最新評論