1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      MySQL的優(yōu)化器對于count(*)的處理方式是什么

      今天就跟大家聊聊有關(guān)MySQL的優(yōu)化器對于count(*)的處理方式是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

      創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),遠安企業(yè)網(wǎng)站建設(shè),遠安品牌網(wǎng)站建設(shè),網(wǎng)站定制,遠安網(wǎng)站建設(shè)報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,遠安網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

         最近看了很多阿里同學的MySQL文章,阿里內(nèi)核同學的文章一言不合就上代碼,不光讓我們看到了結(jié)果,還能有代碼可讀,如果碰到了類似的問題,這樣的解讀確實是很難得的。

         今天做了一個小的測試,發(fā)現(xiàn)MySQL 5.7中對于count(*)的處理好像有點霸道,沒想象中那么好。

         為了對比,我找了一套5.6的環(huán)境。

      總體而言5.6的環(huán)境中對于count(*)的處理可塑性很強,很隨和,你讓我怎么查我就怎么查。初始數(shù)據(jù)為100萬。

      +----------+
      | count(*) |
      +----------+
      |  1000000 |
      +----------+

      建表的語句如下:

      >show create table test\G
      *************************** 1. row ***************************
             Table: test
      Create Table: CREATE TABLE `test` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `a` int(11) DEFAULT NULL,
        `b` int(11) DEFAULT NULL,
        `c` int(11) DEFAULT NULL,
        PRIMARY KEY (`id`),
        KEY `mrrx` (`a`,`b`),
        KEY `xx` (`c`)
      ) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8
      1 row in set (0.00 sec)一直以來MySQL中count(*)的用法都是不被提倡,或者說是惡名遠揚,這一點讓很多學習Oracle的同學很不理解,其實他們是身在福中不知福。

      這樣的一個count(*)的查詢,在5.6中的效果是這樣的,估算的時候默認是走了索引xx

      >explain select count(*) from test\G
      *************************** 1. row ***************************
                 id: 1
        select_type: SIMPLE
              table: test
               type: index
      possible_keys: NULL
                key: xx
            key_len: 5
                ref: NULL
               rows: 998396
              Extra: Using index
      1 row in set (0.01 sec)   
      如果我們強制走mrrx索引,優(yōu)化器說也行,于是就走了mrrx的索引,估算的數(shù)據(jù)情況和上面有一些小的差別。
      >explain select count(*) from test force index(mrrx)\G
      *************************** 1. row ***************************
                 id: 1
        select_type: SIMPLE
              table: test
               type: index
      possible_keys: NULL
                key: mrrx
            key_len: 10
                ref: NULL
               rows: 947698
              Extra: Using index
      1 row in set (0.00 sec)或者我們顯式指定就要xx索引了,優(yōu)化器說好,然后估算得到的行數(shù)和第一個差別很小。
      >explain select count(*) from test force index(xx)\G
      *************************** 1. row ***************************
                 id: 1
        select_type: SIMPLE
              table: test
               type: index
      possible_keys: NULL
                key: xx
            key_len: 5
                ref: NULL
               rows: 947698
              Extra: Using index
      1 row in set (0.00 sec)如果換一種姿勢,如果指定索引列c,指定一個條件,再來看看,就會看到前后的結(jié)果差別就很大了。
      >explain select count(*) from test where c > 0\G
      *************************** 1. row ***************************
                 id: 1
        select_type: SIMPLE
              table: test
               type: range
      possible_keys: xx
                key: xx
            key_len: 5
                ref: NULL
               rows: 473849
              Extra: Using where; Using index
      1 row in set (0.00 sec)這么看來,5.6里面的一個硬傷還是對于統(tǒng)計信息這塊的評估差別較大,沒有了統(tǒng)計信息還是有很大的局限性,不過優(yōu)化器還是很隨和的。

      我們看看5.7的表現(xiàn)

      同樣的語句和數(shù)據(jù)量,在5.7中明顯做了過濾處理,

      > explain select count(*) from test\G
      *************************** 1. row ***************************
                 id: 1
        select_type: SIMPLE
              table: NULL
         partitions: NULL
               type: NULL
      possible_keys: NULL
                key: NULL
            key_len: NULL
                ref: NULL
               rows: NULL
           filtered: NULL
              Extra: Select tables optimized away
      1 row in set, 1 warning (0.02 sec)

      這表示在優(yōu)化器階段已經(jīng)被優(yōu)化了。

      而接下來同樣的語句也都是同樣的處理方式。

      > explain select count(*) from test force index(mrrx)\G
      > explain select count(*) from test force index(xx)\G
              Extra: Select tables optimized away

      而如果我們還是像之前一樣給定索引列c一個過濾條件,優(yōu)化器就一下子變得溫和起來。很明顯這個執(zhí)行的效果要好很多。

      > explain select count(*) from test where c > 0\G
      *************************** 1. row ***************************
                 id: 1
        select_type: SIMPLE
              table: test
         partitions: NULL
               type: range
      possible_keys: xx
                key: xx
            key_len: 5
                ref: NULL
               rows: 498949
           filtered: 100.00
              Extra: Using where; Using index
      1 row in set, 1 warning (0.02 sec)

      從某種程度來說,5.7這樣的處理也算是一種變相的退步啦。

      看完上述內(nèi)容,你們對MySQL的優(yōu)化器對于count(*)的處理方式是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


      本文題目:MySQL的優(yōu)化器對于count(*)的處理方式是什么
      分享路徑:http://www.ef60e0e.cn/article/jhgess.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        武夷山市| 乌鲁木齐市| 黄梅县| 建瓯市| 龙海市| 安丘市| 会昌县| 于田县| 甘泉县| 昌图县| 枣庄市| 武汉市| 洛川县| 潮州市| 稷山县| 承德县| 曲阜市| 筠连县| 延吉市| 嘉善县| 沭阳县| 夏河县| 渝中区| 右玉县| 台州市| 潼南县| 安陆市| 比如县| 增城市| 峡江县| 新巴尔虎右旗| 镇康县| 遂川县| 安阳市| 黄龙县| 孟连| 高台县| 尼木县| 奉节县| 华蓥市| 县级市|