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

MySQL?8.0?對(duì)?limit?的優(yōu)化技巧

 更新時(shí)間:2022年10月20日 08:30:37   作者:ActionTech  
從不同版本的 MySQL 發(fā)展軌跡來(lái)看 MySQL 的優(yōu)化器越來(lái)越智能 (比如大家期待已久的直方圖特性) ,能更多的減少人為干預(yù),提升執(zhí)行計(jì)劃的準(zhǔn)確性,這篇文章主要介紹了MySQL?8.0?對(duì)?limit?的優(yōu)化,需要的朋友可以參考下

一、前言

提到 limit 優(yōu)化,大多數(shù) MySQL DBA 都不會(huì)陌生,能想到各種應(yīng)對(duì)策略,比如延遲關(guān)聯(lián),書(shū)簽式查詢等等,之前我也寫(xiě)過(guò)一篇優(yōu)化的文章:http://m.fzitv.net/article/234357.htm ,有興趣的朋友可以復(fù)習(xí)一下。

二、MySQL 8.0 對(duì)limit 的改進(jìn)

對(duì)于 limit N 帶有 group by ,order by 的 SQL 語(yǔ)句 (order by 和 group by 的字段有索引可以使用),MySQL 優(yōu)化器會(huì)盡可能選擇利用現(xiàn)有索引的有序性,減少排序–這看起來(lái)是 SQL 的執(zhí)行計(jì)劃的最優(yōu)解,但是實(shí)際上效果其實(shí)是南轅北轍,相信很多 DBA 遇到的相關(guān)案例中 sql 執(zhí)行計(jì)劃選擇 order by id 的索引進(jìn)而導(dǎo)致全表掃描,而不是利用 where 條件中的索引查找過(guò)濾數(shù)據(jù)。MySQL 8.0.21 版本之前,并沒(méi)有什么參數(shù)來(lái)控制這種行為,但是自 MySQL 8.0.21 之后提供一個(gè)優(yōu)化器參數(shù) prefer_ordering_index ,通過(guò)設(shè)置 optimizer_switch 來(lái)開(kāi)啟或者關(guān)閉該特性 。 比如:

SET  optimizer_switch  = "prefer_ordering_index=off";
SET  optimizer_switch = "prefer_ordering_index=on";

三、實(shí)踐出真知

測(cè)試環(huán)境 MySQL 社區(qū)版 8.0.30

構(gòu)造測(cè)試數(shù)據(jù)

CREATE TABLE t (
id1 BIGINT  NOT NULL  PRIMARY KEY auto_increment, 
id2 BIGINT NOT NULL,
c1 VARCHAR(50) NOT NULL,
c2 varchar(50) not null,
INDEX i (id2, c1));

insert into t(id2,c1,c2) values(1,'a','xfvs'),(2,'bbbb','xfvs'),(3,'cdddd','xfvs'),(4,'dfdf','xfvs'),(12,'bbbb','xfvs'),(23,'cdddd','xfvs'),(14,'dfdf','xfvs'),
(11,'bbbb','xfvs'),(13,'cdddd','xfvs'),(44,'dfdf','xfvs'),(31,'bbbb','xfvs'),(33,'cdddd','xfvs'),(34,'dfdf','xfvs');

3.1 默認(rèn)開(kāi)啟參數(shù)

mysql  (test) >  SELECT @@optimizer_switch LIKE '%prefer_ordering_index=on%';
+------------------------------------------------------+
| @@optimizer_switch LIKE '%prefer_ordering_index=on%' |
+------------------------------------------------------+
|                                                    1 |
+------------------------------------------------------+
1 row in set (0.00 sec)

查詢非索引字段 ,id2 上有索引 ,order by 主鍵 id1 ,explain 查看執(zhí)行計(jì)劃 type index 說(shuō)明使用索引掃描使用 using where 過(guò)濾結(jié)果集。這個(gè)是優(yōu)化器的自以為的最優(yōu)選擇,但是實(shí)際上遇到數(shù)據(jù)集合比較大的表,該執(zhí)行計(jì)劃就不是最優(yōu)解,反而導(dǎo)致慢查。

mysql  (test) > explain select c2 from t where id2>8 ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t
   partitions: NULL
         type: index
possible_keys: i
          key: PRIMARY
      key_len: 8
          ref: NULL
         rows: 2
     filtered: 69.23
        Extra: Using where
1 row in set, 1 warning (0.00 sec)

3.2 關(guān)閉該參數(shù)

mysql  (test) > SET optimizer_switch = "prefer_ordering_index=off";

mysql  (test) > explain select c2 from t where id2>8 ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t
   partitions: NULL
         type: range
possible_keys: i
          key: i
      key_len: 8
          ref: NULL
         rows: 9
     filtered: 100.00
        Extra: Using index condition; Using filesort
1 row in set, 1 warning (0.00 sec)

經(jīng)過(guò)調(diào)整之后,查看執(zhí)行計(jì)劃發(fā)現(xiàn)優(yōu)化器選擇 id2 索引字段找到記錄做過(guò)濾,并且使用了ICP 特性,減少物理 io 請(qǐng)求,而不是選擇使用主鍵 id1 遍歷索引然后回表查詢。

顯然 通過(guò)人為介入?yún)?shù)調(diào)整優(yōu)化器的行為能帶來(lái)更好的優(yōu)化效果。

四、總結(jié)

從不同版本的 MySQL 發(fā)展軌跡來(lái)看 MySQL 的優(yōu)化器越來(lái)越智能 (比如大家期待已久的直方圖特性) ,能更多的減少人為干預(yù),提升執(zhí)行計(jì)劃的準(zhǔn)確性。

到此這篇關(guān)于MySQL 8.0 對(duì) limit 的優(yōu)化的文章就介紹到這了,更多相關(guān)MySQL 8.0 limit優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MYSQL之on和where的區(qū)別解讀

    MYSQL之on和where的區(qū)別解讀

    這篇文章主要介紹了MYSQL之on和where的區(qū)別解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 基于MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)約束實(shí)例及五種完整性約束介紹

    基于MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)約束實(shí)例及五種完整性約束介紹

    今天小編就為大家分享一篇關(guān)于基于MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)約束實(shí)例及五種完整性約束介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • MySQL中FIND_IN_SET函數(shù)與INSTR函數(shù)用法解析

    MySQL中FIND_IN_SET函數(shù)與INSTR函數(shù)用法解析

    這篇文章主要介紹了MySQL中FIND_IN_SET函數(shù)與INSTR函數(shù)用法解析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-04-04
  • MYSQL 根據(jù)唯一索引鍵更新死鎖問(wèn)題解析

    MYSQL 根據(jù)唯一索引鍵更新死鎖問(wèn)題解析

    這篇文章主要介紹了MYSQL 根據(jù)唯一索引鍵更新死鎖問(wèn)題解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-10-10
  • MySQL中給自定義的字段查詢結(jié)果添加排名的方法

    MySQL中給自定義的字段查詢結(jié)果添加排名的方法

    這篇文章主要介紹了MySQL中給自定義的字段查詢結(jié)果添加排名的方法,只需要對(duì)counter寫(xiě)一個(gè)小算式,非常簡(jiǎn)單,需要的朋友可以參考下
    2015-06-06
  • 詳解MySQL的內(nèi)連接和外連接

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

    這篇文章主要介紹了詳解MySQL的內(nèi)連接和外連接,mySQL包含兩種聯(lián)接,分別是內(nèi)連接(inner join)和外連接(out join),但我們又同時(shí)聽(tīng)說(shuō)過(guò)左連接,交叉連接等術(shù)語(yǔ),本文就帶大家來(lái)了解一下,需要的朋友可以參考下
    2023-05-05
  • 詳解如何利用amoeba(變形蟲(chóng))實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)讀寫(xiě)分離

    詳解如何利用amoeba(變形蟲(chóng))實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)讀寫(xiě)分離

    這篇文章主要介紹了詳解如何利用amoeba(變形蟲(chóng))實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)讀寫(xiě)分離,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • mysql如何能有效防止刪庫(kù)跑路

    mysql如何能有效防止刪庫(kù)跑路

    本文主要介紹了mysql如何能有效防止刪庫(kù)跑路,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • mysql生成隨機(jī)字符串函數(shù)分享

    mysql生成隨機(jī)字符串函數(shù)分享

    這篇文章主要介紹了mysql生成隨機(jī)字符串函數(shù)分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-02-02
  • Mysql?Innodb存儲(chǔ)引擎之索引與算法

    Mysql?Innodb存儲(chǔ)引擎之索引與算法

    索引對(duì)數(shù)據(jù)庫(kù)有多重要,我想大家都已經(jīng)知道了吧,下面這篇文章主要給大家介紹了關(guān)于Mysql?Innodb存儲(chǔ)引擎之索引與算法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02

最新評(píng)論

赤城县| 兴义市| 苍梧县| 延津县| 惠来县| 莱阳市| 中方县| 苍南县| 桐柏县| 寿宁县| 虹口区| 彩票| 平凉市| 游戏| 化州市| 江门市| 镶黄旗| 永平县| 清丰县| 交城县| 石阡县| 凤城市| 渭源县| 秭归县| 清苑县| 正阳县| 屯门区| 五河县| 清水河县| 玛多县| 滕州市| 缙云县| 荣昌县| 饶河县| 咸阳市| 牙克石市| 攀枝花市| 平山县| 芜湖县| 荥阳市| 凤冈县|