superwei

          導(dǎo)航

          <2018年10月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          統(tǒng)計(jì)

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          【Mysql】關(guān)于索引

          DB引擎:InnoDB
          兩表A,B表均為6W+的記錄。用B表的信息更新A表。
          SQL:update A left join B on A.field1 = B.field1 and A.field2 = B.field2
                   set A.field3 = B.field3, A.field4 = B.field4
          無引擎時(shí):每1000更新需要2分11秒,全部更新大概需要2~3小時(shí)。

          此時(shí)加入索引:
          CREATE INDEX field1_Index ON `A`(`field1`);
          注:1、此處只加field1是因?yàn)?field2的內(nèi)容變化很小,就那幾個(gè)值。
                2、此SQL里的字段都不是主鍵

          再次執(zhí)行SQL,效率依舊。似乎索引沒有作用。為了驗(yàn)證我的想法,查看了執(zhí)行方式:
          explain update A left join B on A.field1 = B.field1 and A.field2 = B.field2
                   set A.field3 = B.field3, A.field4 = B.field4 
          果然在執(zhí)行時(shí),沒用到索引。找到癥結(jié),那就繼續(xù)找為什么索引沒有被用的原因。
          查找過程省略,直接上結(jié)果。
          因?yàn)槭莡pdate,所以我認(rèn)為 左聯(lián)和直聯(lián),對于結(jié)果沒有區(qū)別,但是從左聯(lián)改為直聯(lián)后,
          再查詢執(zhí)行方式,發(fā)現(xiàn)就能使用索引(原因暫不知道,以后知道了再寫)
          于是再次執(zhí)行如下SQL:
          update A inner join B on A.field1 = B.field1 and A.field2 = B.field2
                   set A.field3 = B.field3, A.field4 = B.field4 
          6W+的數(shù)據(jù)執(zhí)行時(shí)間:1.43秒
          優(yōu)化完畢。
          另,因?yàn)橐陨献侄味挤侵麈I,所以 SQL修改成以下方式執(zhí)行似乎更快,查詢執(zhí)行方式,用到了主鍵索引和我自己加的索引
          update A left join B on A.field1 = B.field1 and A.field2 = B.field2
                   set A.field3 = B.field3, A.field4 = B.field4
          where A.key in (select key from A)

          附:
          刪除索引:drop INDEX field1_Index ON `A`;
          查看索引:show index from A
          查看線程:select * from information_schema.processlist t
                        show processlist
          殺線程: kill processId


          posted on 2018-10-25 09:49 小辭猬 閱讀(176) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 屏边| 梓潼县| 长汀县| 确山县| 淮北市| 策勒县| 宜章县| 万荣县| 全州县| 富川| 临朐县| 大姚县| 乡宁县| 蓝山县| 陇西县| 疏勒县| 抚顺市| 安国市| 右玉县| 乐东| 喜德县| 北流市| 开化县| 藁城市| 万州区| 徐汇区| 阳城县| 洞口县| 石景山区| 广南县| 平和县| 洛扎县| 建湖县| 泸州市| 鹿泉市| 通州市| 十堰市| 永德县| 额敏县| 明星| 赤峰市|