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

mysql分頁時(shí)offset過大的Sql優(yōu)化經(jīng)驗(yàn)分享

 更新時(shí)間:2017年08月07日 10:38:00   作者:MartinDai  
mysql分頁是我們在開發(fā)經(jīng)常遇到的一個(gè)功能,最近在實(shí)現(xiàn)該功能的時(shí)候遇到一個(gè)問題,所以這篇文章主要給大家介紹了關(guān)于mysql分頁時(shí)offset過大的Sql優(yōu)化經(jīng)驗(yàn),文中介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起看看吧。

發(fā)現(xiàn)問題

當(dāng)我們展示一個(gè)列表中的內(nèi)容時(shí),難免會(huì)遇到分頁問題,因?yàn)榱斜碇械膬?nèi)容數(shù)量可能很多,但是用戶能一次看到的界面大小是有限的,不可能一個(gè)界面展示所有的內(nèi)容,從后端一次性取太多的數(shù)據(jù)也會(huì)給后端造成額外的壓力。

通常分頁查詢的時(shí)候會(huì)使用這樣的語句:

SELECT
*
FROM table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000

當(dāng)offset特別大時(shí),這條語句的執(zhí)行效率會(huì)明顯減低,而且效率是隨著offset的增大而降低的。

原因?yàn)椋?/strong>

MySQL并不是跳過offset行,而是取offset+N行,然后返回放棄前offset行,返回N行,當(dāng)offset特別大,然后單條數(shù)據(jù)也很大的時(shí)候,每次查詢需要獲取的數(shù)據(jù)就越多,自然就會(huì)很慢。

優(yōu)化方案:

SELECT
*
FROM table
JOIN
(select id from table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000)
as tmp using(id)

或者

SELECT a.* FROM table a, 
(select id from table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000) b 
where a.id = b.id

先獲取主鍵列表,再通過主鍵查詢目標(biāo)數(shù)據(jù),即使offset很大,也是獲取了很多的主鍵,而不是所有的字段數(shù)據(jù),相對而言效率會(huì)提升很多。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • MYSQL初學(xué)者命令行使用指南

    MYSQL初學(xué)者命令行使用指南

    其實(shí)MYSQL的對數(shù)據(jù)庫的操作與其它的SQL類數(shù)據(jù)庫大同小異,您最好找本將SQL的書看看。我在這里只介紹一些基本的,其實(shí)我也就只懂這些了,呵呵。最好的MYSQL教程還是“晏子“譯的“MYSQL中文參考手冊“不僅免費(fèi)每個(gè)相關(guān)網(wǎng)站都有下載,而且它是最權(quán)威的。
    2008-06-06
  • MySQL常見錯(cuò)誤以及解決方法

    MySQL常見錯(cuò)誤以及解決方法

    該文章詳細(xì)介紹了在使用MySQL數(shù)據(jù)庫時(shí)可能遇到的常見錯(cuò)誤及其解決方法,涵蓋了權(quán)限問題、配置錯(cuò)誤、文件問題、網(wǎng)絡(luò)問題等多種情況,文章內(nèi)容全面,實(shí)用性強(qiáng),適合數(shù)據(jù)庫管理員和開發(fā)人員參考
    2024-12-12
  • mysql允許外網(wǎng)訪問以及修改mysql賬號(hào)密碼實(shí)操方法

    mysql允許外網(wǎng)訪問以及修改mysql賬號(hào)密碼實(shí)操方法

    這篇文章主要介紹了mysql允許外網(wǎng)訪問以及修改mysql賬號(hào)密碼實(shí)操方法,有需要的朋友們可以參考學(xué)習(xí)下。
    2019-08-08
  • Mysql 默認(rèn)字符集設(shè)置方法(免安裝版)

    Mysql 默認(rèn)字符集設(shè)置方法(免安裝版)

    有些時(shí)候我們在使用非安裝版的mysql是需要設(shè)置默認(rèn)字符集的時(shí)候,就需要這樣的修改了。安裝版的可以選擇的。
    2009-03-03
  • 如何實(shí)現(xiàn)mysql的遠(yuǎn)程連接

    如何實(shí)現(xiàn)mysql的遠(yuǎn)程連接

    這篇文章詳細(xì)介紹了mysql如何實(shí)現(xiàn)遠(yuǎn)程連接,文中有詳細(xì)的代碼實(shí)例講解,有一定的參考價(jià)值,需要的朋友可以參考閱讀
    2023-04-04
  • mysql存儲(chǔ)過程之case語句用法實(shí)例詳解

    mysql存儲(chǔ)過程之case語句用法實(shí)例詳解

    這篇文章主要介紹了mysql存儲(chǔ)過程之case語句用法,結(jié)合實(shí)例形式詳細(xì)分析了mysql存儲(chǔ)過程中case語句的相關(guān)功能、原理與使用技巧,需要的朋友可以參考下
    2019-12-12
  • 生產(chǎn)庫自動(dòng)化MySQL5.6安裝部署詳細(xì)教程

    生產(chǎn)庫自動(dòng)化MySQL5.6安裝部署詳細(xì)教程

    自動(dòng)化運(yùn)維是一個(gè)DBA應(yīng)該掌握的技術(shù),其中,自動(dòng)化安裝數(shù)據(jù)庫是一項(xiàng)基本的技能,這篇文章主要介紹了生產(chǎn)庫自動(dòng)化MySQL5.6安裝部署詳細(xì)教程,需要的朋友可以參考下
    2016-09-09
  • MySQL中TEXT類型存儲(chǔ)極限與實(shí)踐案例

    MySQL中TEXT類型存儲(chǔ)極限與實(shí)踐案例

    本文解析MySQL TEXT類型存儲(chǔ)極限及工程實(shí)踐,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-10-10
  • 修改MySQL數(shù)據(jù)庫中表和表中字段的編碼方式的方法

    修改MySQL數(shù)據(jù)庫中表和表中字段的編碼方式的方法

    這篇文章主要介紹了如何修改MySQL數(shù)據(jù)庫中表和表中字段的編碼方式,需要的朋友可以參考下
    2014-05-05
  • SQL中CONVERT轉(zhuǎn)換函數(shù)的簡單使用方法

    SQL中CONVERT轉(zhuǎn)換函數(shù)的簡單使用方法

    CONVERT()函數(shù)對于簡單類型轉(zhuǎn)換,CONVERT()函數(shù)和CAST()函數(shù)的功能相同,只是語法不同,下面這篇文章主要給大家介紹了關(guān)于SQL中CONVERT轉(zhuǎn)換函數(shù)的簡單使用方法,需要的朋友可以參考下
    2024-01-01

最新評論

烟台市| 苏尼特左旗| 黄骅市| 桐乡市| 阿克苏市| 金山区| 易门县| 辽中县| 西丰县| 轮台县| 饶河县| 灵山县| 普安县| 敦煌市| 平阳县| 万全县| 商洛市| 浦北县| 阳信县| 夏邑县| 揭阳市| 西藏| 阳江市| 建水县| 瓮安县| 蒲城县| 教育| 武鸣县| 平山县| 温宿县| 合阳县| 新化县| 静安区| 黄石市| 临江市| 洪湖市| 政和县| 华亭县| 紫金县| 灵台县| 绩溪县|