精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL:BUG導(dǎo)致DDL語(yǔ)句無(wú)謂的索引重建

數(shù)據(jù)庫(kù) MySQL
對(duì)于5.7.23之前的版本在評(píng)估類(lèi)似DDL操作的時(shí)候需要謹(jǐn)慎,可能評(píng)估為瞬間操作,但是實(shí)際上線(xiàn)的時(shí)候跑了很久,這個(gè)就容易導(dǎo)致超過(guò)維護(hù)窗口,甚至更大的故障。

一、問(wèn)題模擬

使用5.7.22版本:

建表語(yǔ)句,注意這里字段a包含了一個(gè)索引,這是觸發(fā)這個(gè)BUG的必要條件:
mysql> show create table testmy \G
*************************** 1. row ***************************
       Table: testmy
Create Table: CREATE TABLE `testmy` (
  `id` int(11) DEFAULT NULL,
  `a` varchar(24) DEFAULT NULL COMMENT 'test1',
  KEY `a` (`a`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

數(shù)據(jù)量:
mysql> select count(*) from testmy;
+----------+
| count(*) |
+----------+
|   262144 |
+----------+
1 row in set (5.17 sec)

執(zhí)行DDL語(yǔ)句:
alter table testmy modify `a` varchar(30) comment 'test1111';

本DDL語(yǔ)句主要完成:

  • 擴(kuò)展varchar從24*4到30*4
  • 更改字段的comment

按照常理來(lái)講這個(gè)DDL是只修改元數(shù)據(jù)的,因此應(yīng)該瞬間完成,但是實(shí)際在5.7.22版本中這個(gè)語(yǔ)句重建了索引a,耗時(shí)如下:

mysql> alter table testmy modify `a` varchar(30) comment 'test1';
Query OK, 0 rows affected (2.50 sec)
Records: 0  Duplicates: 0  Warnings: 0

很明顯重建了索引,才會(huì)有這么高的耗時(shí)。而在5.7的新版本或者8.0中測(cè)試這個(gè)語(yǔ)句是瞬間完成的。

二、官方文檔說(shuō)明

也就是說(shuō)正常的擴(kuò)展varchar的長(zhǎng)度,只要字符集字節(jié)數(shù)量*字符數(shù)量不跨越256,那么就是修改元數(shù)據(jù),不會(huì)重建索引。

三、問(wèn)題分析

既然不符合官方文檔的說(shuō)明,那么這個(gè)問(wèn)題肯定是某種BUG導(dǎo)致。當(dāng)我們進(jìn)行DDL操作的時(shí)候,需要對(duì)比更改部分和現(xiàn)有的數(shù)據(jù)字典中標(biāo)定義的差別,然后根據(jù)這些差別來(lái)定義操作方式,然后根據(jù)操作方式來(lái)判斷哪一種DDL 方式比較合適,關(guān)于定義操作方式的部分來(lái)自于函數(shù)fill_alter_inplace_info,而在函數(shù)中會(huì)根據(jù)新表的索引和老表的索引字段的長(zhǎng)度判斷是否需要drop索引和新建索引,代碼中體現(xiàn)為如下:

  /*
    Step through all keys of the old table and search matching new keys.
  */
  for (table_key= table->key_info; table_key < table_key_end; table_key++) //循環(huán)老表的索引
  {
    /* Skip renamed keys. */
    if (table_key->flags & HA_KEY_RENAMED)
      continue;

    new_key= find_key_cs(table_key->name, ha_alter_info->key_info_buffer,
                         new_key_end);//在新的定義中是否包含這個(gè)索引

    if (new_key == NULL) //如果找不到說(shuō)明這個(gè)索引要drop掉
    {
      /* Matching new key not found. This means the key should be dropped. */
      ha_alter_info->add_dropped_key(table_key); //加入到drop key buffer
    }
    else if (has_index_def_changed(ha_alter_info, table_key, new_key))//是否索引有所改變
    {
      /* Key was modified. */
      ha_alter_info->add_modified_key(table_key, new_key); //加入到modify key buffer
    }
  }

而加入到modify buffer后這個(gè)索引就是需要drop并且add的,因此DDL類(lèi)型定義為,Alter_inplace_info::DROP_INDEX|Alter_inplace_info::ADD_INDEX,因此就需要進(jìn)行索引的刪除和重建,因此關(guān)鍵就是函數(shù)has_index_def_changed的更改,我們先看5.7.22的這個(gè)BUG相關(guān)的判斷點(diǎn):

    if (key_part->length != new_part->length)
      return true;  

也就是當(dāng)索引字段長(zhǎng)度更改了就返回true。而在新版本中:

    if (key_part->length != new_part->length &&
        ha_alter_info->alter_info->flags == Alter_info::ALTER_CHANGE_COLUMN &&
        (key_part->field->is_equal((Create_field *)new_field) == IS_EQUAL_PACK_LENGTH))
    {
      ha_alter_info->handler_flags|=
          Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH;
    }
    else if (key_part->length != new_part->length)
      return true;

變更還是比較大的,主要是key_part->field->is_equal((Create_field *)new_field) == IS_EQUAL_PACK_LENGTH)這個(gè)條件是否滿(mǎn)足,而判定的函數(shù)為Field_varstring::is_equal,

uint Field_varstring::is_equal(Create_field *new_field)
{
  if (new_field->sql_type == real_type() &&
      new_field->charset == field_charset)
  {
    if (new_field->length == max_display_length()) //新老字段長(zhǎng)度相同
      return IS_EQUAL_YES;
    DBUG_ASSERT(0 == (new_field->length % field_charset->mbmaxlen));
    DBUG_ASSERT(0 == (max_display_length() % field_charset->mbmaxlen));
    if (new_field->length > max_display_length() && //新字段長(zhǎng)度大于老字段長(zhǎng)度,需要額外判斷
 ((new_field->length <= 255 && max_display_length() <= 255) ||
  (new_field->length > 255 && max_display_length() > 255)))
      return IS_EQUAL_PACK_LENGTH; // VARCHAR, longer variable length
  }
  return IS_EQUAL_NO;
}

其重點(diǎn)為如下:

  • A:如果新的字段長(zhǎng)度>老的字段的長(zhǎng)度
  • B:字段長(zhǎng)度不能跨越255字節(jié)

那么則返回IS_EQUAL_PACK_LENGTH,因此就這個(gè)點(diǎn)上has_index_def_changed函數(shù)就會(huì)返回false,不會(huì)刪除和重建索引了。

四、相關(guān)BUG

這個(gè)BUG雖然有點(diǎn)老了,是5.7.23修復(fù)的,如下:

但是對(duì)于5.7.23之前的版本在評(píng)估類(lèi)似DDL操作的時(shí)候需要謹(jǐn)慎,可能評(píng)估為瞬間操作,但是實(shí)際上線(xiàn)的時(shí)候跑了很久,這個(gè)就容易導(dǎo)致超過(guò)維護(hù)窗口,甚至更大的故障,因此還是建議任何DDL操作除了翻看官方文檔以外,都需要在相同版本的數(shù)據(jù)庫(kù)測(cè)試環(huán)境測(cè)試其耗時(shí)是否達(dá)到預(yù)估水平。

責(zé)任編輯:趙寧寧 來(lái)源: MySQL學(xué)習(xí)
相關(guān)推薦

2023-08-14 08:32:42

MySQL數(shù)據(jù)庫(kù)

2010-11-16 09:18:39

oracle重建索引

2020-12-08 09:45:07

MySQL數(shù)據(jù)庫(kù)索引

2010-10-12 16:44:36

MySQL語(yǔ)句

2023-06-12 09:09:19

MySQLDDLNSTANT

2010-10-08 16:20:35

MySQL語(yǔ)句

2021-09-27 10:15:10

故障業(yè)務(wù)方電腦

2022-07-12 09:36:18

數(shù)據(jù)庫(kù)查詢(xún)

2011-08-09 16:15:23

OracleDDL語(yǔ)句DML語(yǔ)句

2010-11-16 09:49:22

Oracle重建索引

2015-09-02 13:38:38

Windows 10搜索索引

2024-06-11 00:04:00

對(duì)象AdvisorAdvice

2023-11-29 14:20:16

iOS 17Bug蘋(píng)果

2022-06-27 07:23:44

MySQL常量優(yōu)化

2019-08-20 22:06:32

Oracle數(shù)據(jù)庫(kù)索引

2023-01-04 09:29:03

線(xiàn)程業(yè)務(wù)代碼

2021-09-11 19:00:54

Intro元素MemoryCache

2024-06-12 12:59:16

2009-10-21 16:34:03

Oracle用戶(hù)名重建索引

2024-07-03 09:15:33

MySQL表達(dá)式索引
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

久9re热视频这里只有精品| 内射后入在线观看一区| 久久综合av| 欧美一区二区人人喊爽| 黄色www网站| av中文字幕一区二区三区| 国模少妇一区二区三区| 91精品国产91久久久久久吃药| 乐播av一区二区三区| 国产剧情一区二区在线观看| 欧美日韩在线视频一区| 日韩人妻精品一区二区三区| 四虎电影院在线观看| 国内外成人在线| 日韩av黄色在线观看| 午夜写真片福利电影网| 国产探花一区二区| 亚洲成人精品久久久| 国产aⅴ爽av久久久久| 色老头在线一区二区三区| 中文字幕日韩欧美一区二区三区| 国产精品一区二区三区在线观| 又色又爽又黄无遮挡的免费视频| 亚洲视频高清| 色妞一区二区三区| 国产精品无码久久久久久| 9l亚洲国产成人精品一区二三| 欧美午夜片在线看| 日本日本19xxxⅹhd乱影响| 在线中文字幕第一页| 在线能看的av| 午夜欧美巨大性欧美巨大 | www.自拍偷拍| 99re6热只有精品免费观看| 欧美日本视频在线| 午夜激情在线观看视频| 免费在线小视频| 亚洲一区二区视频在线观看| 精品一区二区成人免费视频| av亚洲在线| 久久九九久久九九| 欧美区高清在线| 香蕉视频黄色片| 91麻豆精品在线观看| 精品国产乱码久久久久| 日本精品一二区| 成人天堂资源www在线| 51精品国产人成在线观看 | 欧美黄色免费观看| 欧美高清不卡| 欧美高清自拍一区| 久久久久久久久久久久国产| 欧美破处大片在线视频| 欧美肥老妇视频| 久久精品国产亚洲av无码娇色| 伊人成年综合电影网| 午夜精品久久久久久久99黑人 | 在线视频国产一区| 亚洲成色www.777999| 国产精品伊人| 91精品国产色综合久久不卡蜜臀| 91欧美一区二区三区| 美国十次综合久久| 精品国产3级a| 日韩一级视频在线观看| 精品国产1区| 色婷婷久久一区二区| 东方av正在进入| 激情视频一区二区三区| 欧美一区视频在线| 自拍偷拍第八页| 国产专区欧美精品| 国产免费一区二区三区| 日本一二三区在线视频| 中文字幕乱码日本亚洲一区二区 | 成人午夜电影在线播放| 天堂av电影在线观看| 中文久久乱码一区二区| 亚洲区成人777777精品| 国产一二三在线| 欧洲亚洲国产日韩| 伊人av在线播放| 任你躁在线精品免费| 一区二区国产精品视频| 无码人妻精品一区二区三区夜夜嗨| 激情欧美亚洲| 国产乱肥老妇国产一区二| 亚洲精品喷潮一区二区三区| 97久久精品人人做人人爽| 亚洲国产日韩综合一区| 韩国成人免费视频| 日本高清不卡在线观看| gogo亚洲国模私拍人体| 国产精品一区高清| 欧美高跟鞋交xxxxxhd| 亚洲av无码精品一区二区| 久久99九九99精品| 久久精品日产第一区二区三区乱码 | 男人用嘴添女人下身免费视频| 久久久成人av毛片免费观看| 欧美一级二级三级乱码| 性少妇bbw张开| 欧美三级免费| 国产美女被下药99| 婷婷丁香一区二区三区| 中文字幕一区二区不卡| 国产h视频在线播放| 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 精品小视频在线| 69av视频在线| 毛片一区二区三区| 免费国产一区二区| 在线黄色网页| 欧美狂野另类xxxxoooo| 中文字幕高清视频| 在线观看一区| 亚洲一区亚洲二区亚洲三区| 阿v免费在线观看| 图片区小说区区亚洲影院| 亚洲一区二区三区四区精品| 欧美精品色图| 日本国产高清不卡| 午夜福利理论片在线观看| 亚洲乱码日产精品bd| 欧美成人免费高清视频| 欧美日韩导航| 欧美精品久久久久a| 国产男女猛烈无遮挡| 国产精品久久久久一区二区三区| 国产日产欧美视频| 欧美日韩一区二区三区四区不卡| 精品视频9999| 国产手机av在线| 亚洲三级电影全部在线观看高清| 午夜免费高清视频| 欧美三级美国一级| 日韩免费中文字幕| 国产高清在线| 欧美午夜寂寞影院| 五月天精品视频| 久久久国产亚洲精品| 久久99国产精品99久久| av中文字幕电影在线看| 精品国产自在久精品国产| 欧美激情图片小说| 国产在线日韩欧美| 正在播放一区二区三区| 色综合一区二区日本韩国亚洲 | 日韩高清在线一区| 日韩免费av电影| 巨胸喷奶水www久久久免费动漫| 亚洲区在线播放| 免费观看日批视频| 欧美激情在线一区二区| 一本色道久久亚洲综合精品蜜桃| 欧美日韩激情| 国产精品爽爽爽| 成人高清免费在线| 精品久久久久久久久久久院品网| 久久久精品99| 99久久精品一区| 久久婷婷国产精品| 日本一本不卡| 91人成网站www| 美女精品视频| 日韩精品在线观| 99成人精品视频| 中文字幕一区视频| 北京富婆泄欲对白| 日韩影院在线观看| 波多野结衣三级在线| 伊人久久亚洲| 国产精品pans私拍| 久操视频在线| 亚洲国产中文字幕久久网| 中文字幕一区二区人妻视频| 亚洲视频狠狠干| 国产人妻黑人一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 国产精品我不卡| 欧美日韩视频免费观看| 久久久久999| 日韩中文字幕综合| 欧美综合色免费| 久久久久亚洲av无码专区 | 欧美a级片免费看| 懂色中文一区二区在线播放| 妞干网在线免费视频| 91成人超碰| 欧美激情专区| 538任你躁精品视频网免费| 5566成人精品视频免费| 老司机在线视频二区| 日韩精品一区二区视频| 国产人妻精品一区二区三| 狠狠色香婷婷久久亚洲精品| 免费三级在线观看| 久久午夜羞羞影院免费观看| 搡的我好爽在线观看免费视频| 在线亚洲国产精品网站| 国产对白在线播放| 国产一区二区区别| 国产精品裸体一区二区三区| 在线观看亚洲精品福利片| 57pao精品| 久久久123| 久久久精品免费| 国产高清在线观看| 日韩精品极品视频| 亚洲免费黄色片| 欧美情侣在线播放| 极品国产91在线网站| 亚洲一区二区av在线| 国产探花在线视频| 国产日产欧产精品推荐色| 理论片大全免费理伦片| 国产不卡在线一区| 日韩av加勒比| 韩国v欧美v日本v亚洲v| 91n.com在线观看| 蜜桃av综合| 免费在线观看亚洲视频| 亚洲一级网站| 韩国无码av片在线观看网站| 911久久香蕉国产线看观看| 视频在线观看成人| 自拍亚洲一区| 久久偷窥视频| 日韩av不卡一区| 国产日韩精品推荐| 久久1电影院| 黑人巨大精品欧美一区二区小视频 | 3d蒂法精品啪啪一区二区免费| 色婷婷成人网| 成人激情免费在线| 日本国产亚洲| 国产在线观看一区二区三区 | 国内在线观看一区二区三区| 经典三级在线视频| 中文字幕一区二区三区欧美日韩| 在线免费观看成人网| 四虎成人av| 久久久成人精品一区二区三区| 91精品观看| 亚洲国产精品女人| 黄色亚洲大片免费在线观看| 男人日女人视频网站| 日韩午夜电影| 免费日韩视频在线观看| 久久在线精品| 性刺激的欧美三级视频| 日本欧美加勒比视频| 日本超碰在线观看| 国产一区二区在线影院| 国产精品99精品无码视亚| 成人精品高清在线| 91黄色免费视频| 久久久久久亚洲综合| 国产一区二区三区四区五区六区| 国产精品欧美经典| 亚洲国产成人精品综合99| 午夜久久福利影院| www.久久精品视频| 欧美日韩一区二区在线观看视频| 亚洲一区二区三区高清视频| 制服丝袜亚洲网站| 亚洲成人av综合| 亚洲精品一区二三区不卡| 成人av一区| 欧美日韩不卡合集视频| 91探花在线观看| 国产精品国产三级国产aⅴ浪潮 | 久久性天堂网| 欧美成人乱码一二三四区免费| 国产一区二区三区免费播放| 毛茸茸free性熟hd| 中文字幕欧美日本乱码一线二线| 日本中文在线视频| 福利一区视频在线观看| 中文字幕人妻一区二区三区视频| 91精品国产欧美一区二区| 神宫寺奈绪一区二区三区| 日韩在线欧美在线| av中文在线资源| 成人黄色片在线| 四虎5151久久欧美毛片| 中国一级黄色录像| 午夜在线一区| 性生活在线视频| 国产亚洲精品久| 国产一级视频在线播放| 欧美体内she精视频| 99热这里只有精品9| 亚洲男人天堂网站| 性国产高清在线观看| 国产成人鲁鲁免费视频a| 欧美专区视频| 神马影院我不卡| 9色精品在线| 男插女视频网站| 国产欧美日韩在线| 91精品国产乱码在线观看| 欧美一区二区福利视频| 国产区在线视频| 97超碰蝌蚪网人人做人人爽| 麻豆视频久久| 日韩欧美一区二区三区四区| 欧美.www| 色噜噜狠狠一区二区三区狼国成人| www欧美成人18+| 日本三级网站在线观看| 欧美一区二区三区婷婷月色| 国产永久av在线| 欧美一区二区影院| 欧美美女啪啪| 蜜臀av色欲a片无码精品一区 | 一本一道久久a久久精品综合蜜臀| 国产又粗又猛视频免费| 亚洲欧美在线一区| 毛片在线网站| 狠狠色伊人亚洲综合网站色| 亚洲综合专区| 在线看免费毛片| 国产精品大尺度| 在线观看免费中文字幕| 亚洲社区在线观看| 不卡av影片| 久久精品国产美女| 亚洲欧美激情诱惑| 中文字幕影片免费在线观看| 亚洲第一在线综合网站| 亚洲国产一二三区| 欧美精品aaa| jizzjizzjizz欧美| 国产aaa免费视频| 成人性生交大片免费看中文网站| 国产第一页浮力| 91精品国产全国免费观看| 最新av在线播放| caoporen国产精品| 国产精品magnet| 91超薄肉色丝袜交足高跟凉鞋| 一区二区免费看| 亚洲国产精品无码久久| 欧美激情亚洲视频| 精品自拍偷拍| 精品国产成人av在线免| 久久久99久久| 亚洲一级黄色大片| 久久国产精品久久久| 日韩在线网址| 黄色成人在线看| 久久久久久久网| 欧美国产一级片| 久久精品视频网站| 亚洲欧美日本国产| 成人在线免费在线观看| 久久久噜噜噜久噜久久综合| 伊人网视频在线| 乱亲女秽乱长久久久| 国产福利资源一区| 国产超级av在线| 中文字幕的久久| 99精品在线视频观看| 久久久久久一区二区三区| 亚洲免费毛片| 五月婷婷六月丁香激情| 亚洲女同女同女同女同女同69| 免费观看的毛片| 日本三级久久久| 91精品一区国产高清在线gif| 91人妻一区二区三区| 狠狠干狠狠久久| 麻豆影视在线观看_| 国产亚洲精品美女久久久m| 久久久亚洲一区| 日本中文在线视频| 精品视频在线观看日韩| 色狠狠一区二区三区| 国产中文字幕二区| 欧美高清在线一区| www.激情五月| 国产第一区电影| 黄色成人在线网址| 天堂在线中文视频| 欧美成人三级在线| 亚洲精品555| 浮妇高潮喷白浆视频| 成人免费一区二区三区在线观看| 色婷婷综合视频| 成人在线中文字幕| 午夜亚洲视频| 久久99久久久| 中文字幕无线精品亚洲乱码一区| 视频在线观看免费影院欧美meiju 视频一区中文字幕精品 | 亚洲一区二区少妇| 日韩高清不卡一区二区| 国产一级特黄视频| 久久精品国产成人| 国产探花一区在线观看|