精品欧美一区二区三区在线观看 _久久久久国色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)

日韩色性视频| 国产剧情在线观看| 夜夜精品视频| 国产亚洲欧美视频| 无码人妻少妇色欲av一区二区| a级网站在线播放| 成人国产免费视频| 国产精品久久久久免费a∨| 亚洲综合网在线| 日韩av系列| 欧美人成免费网站| 精品视频免费在线播放| 精精国产xxxx视频在线| 97久久精品人人澡人人爽| 成人自拍性视频| 草久久免费视频| 亚洲一本二本| 亚洲区中文字幕| 手机免费看av片| 日本欧美在线| 欧美性猛交xxx| av影院在线播放| 1024国产在线| 久久综合色8888| 国产精品高清一区二区三区| 曰批又黄又爽免费视频| 中文日韩欧美| 欧美精品999| 51精品免费网站| 精品欧美久久| 日韩黄色在线免费观看| 折磨小男生性器羞耻的故事| 97精品资源在线观看| 欧美亚洲一区二区三区四区| 欧美亚洲一二三区| sm性调教片在线观看| 亚洲精选免费视频| 一区二区视频国产| 亚洲s色大片| 久久精品欧美日韩精品| 久久日韩精品| 五月天婷婷社区| 国产在线不卡视频| 91亚洲精华国产精华| 中文 欧美 日韩| 免费精品视频在线| 国产精品视频久久久| 国产精品传媒在线观看| 久久动漫亚洲| 国产成人极品视频| 无码人妻av免费一区二区三区| 一区二区三区国产盗摄| 98精品在线视频| 草久久免费视频| 亚洲欧美bt| 欧美做爰性生交视频| 国产69精品久久久久久久久久| 亚洲精选久久| 78m国产成人精品视频| 国产成人精品一区二三区| 一本久道久久综合狠狠爱| 国产一二在线观看| 视频一区日韩精品| 欧美高清视频在线高清观看mv色露露十八| 日本女优爱爱视频| 日韩成人高清| 欧美色精品天天在线观看视频| 日本黄色三级大片| 日韩伦理三区| 欧美视频在线不卡| 嫩草视频免费在线观看| 成人国产精品一区二区网站| 91 com成人网| www.欧美com| 精品女人视频| 亚洲天天在线日亚洲洲精| 中文字幕伦理片| 国产精品久久久久久麻豆一区软件| 色吧影院999| 欧美三级免费看| 国产午夜久久| 国产精品久久久久999| 国产原创中文av| 国产盗摄女厕一区二区三区| 激情小说网站亚洲综合网 | 在线观看二区| 亚洲日本护士毛茸茸| av在线免费观看国产| www成人免费观看| 欧美在线影院一区二区| 古装做爰无遮挡三级聊斋艳谭| 国产精品chinese在线观看| 亚洲人成电影网站| 破处女黄色一级片| 香蕉久久久久久久av网站| 91精品国产综合久久香蕉的用户体验 | 日韩Av无码精品| 欧美系列电影免费观看| 美乳少妇欧美精品| 无码人妻丰满熟妇区五十路| 国产精品一区在线| 欧美激情论坛| 污污的网站在线看| 欧美亚洲综合网| 蜜臀av粉嫩av懂色av| 成人一区二区| 91超碰中文字幕久久精品| 中文字字幕在线中文乱码| 成人少妇影院yyyy| www.亚洲一区二区| 视频在线日韩| 亚洲成人黄色在线| 亚洲综合久久av一区二区三区| 亚洲国产精品第一区二区三区| 国产免费一区二区三区在线观看| 天堂中文字幕av| 中文字幕在线不卡国产视频| www.com毛片| julia中文字幕一区二区99在线| 少妇高潮久久77777| 国产a∨精品一区二区三区仙踪林| 精品一区二区久久| 日本亚洲欧洲精品| 午夜不卡影院| 亚洲成在人线av| 九九九久久久久| 国产在线精品一区二区三区不卡 | 亚洲乱码电影| 国产极品jizzhd欧美| 香蕉视频黄在线观看| 一区二区三区精品在线| 亚洲第一色av| 99精品综合| 国产欧美va欧美va香蕉在| 日本免费不卡| 欧美午夜视频一区二区| 日b视频在线观看| 欧美日本国产| 91中文在线视频| 国产在线高潮| 3d动漫精品啪啪一区二区竹菊| 少妇av片在线观看| 日本一不卡视频| 日韩不卡av| 久久xxx视频| 中文字幕精品av| 成年人晚上看的视频| 久久久不卡影院| 欧美牲交a欧美牲交aⅴ免费真| 国产一区调教| 91成人精品网站| 桃花色综合影院| 欧美日韩综合视频网址| 人妻无码中文久久久久专区| 9国产精品视频| 欧美日韩亚洲在线 | 欧美午夜精品在线| 99久久久无码国产精品性 | 91福利免费观看| 国产高清欧美| 超碰国产精品久久国产精品99| 性欧美videos高清hd4k| 欧美精品一区男女天堂| 成人毛片18女人毛片| 久久人人97超碰com| 波多野结衣作品集| 久久影视一区| 91一区二区三区| 国产一二三在线| 国产视频精品自拍| 五月激情丁香网| 中文字幕一区av| 欧美一区二区三区影院| 亚洲狼人精品一区二区三区| 久久综合色一本| 国产精品第一| 欧美成人精品xxx| 神马久久久久久久久久| 日本道色综合久久| 永久免费看片视频教学| 成人精品免费看| 九一精品在线观看| 欧美福利网址| 精品国产乱码久久久久久郑州公司| 九九热线视频只有这里最精品| 在线视频一区二区| 成人午夜视频一区二区播放| 欧美日韩免费观看中文| 你懂得视频在线观看| 国产电影精品久久禁18| 免费黄色特级片| 综合日韩在线| 欧美日韩国产精品一卡| 国产精品亚洲四区在线观看| 26uuu国产精品视频| 日本韩国在线视频爽| 亚洲国产天堂网精品网站| 中文字幕有码无码人妻av蜜桃| 一区二区三区中文免费| 一级片视频免费看| 国产成人综合精品三级| 天天操天天爽天天射| 亚洲五月婷婷| 在线不卡视频一区二区| 亚洲老女人视频免费| 99久久99久久精品国产片| 日韩欧美一区二区三区在线观看| 欧美高清videos高潮hd| 午夜视频成人| 日韩av在线网页| 国产精品国产精品国产专区| 色哟哟国产精品免费观看| 超碰在线国产97| 欧美激情在线看| 捆绑裸体绳奴bdsm亚洲| 国产高清久久久久| 国产视频一区二区视频| 中文在线一区| 欧美一级欧美一级| 欧美精品日本| 小说区视频区图片区| 九九视频精品全部免费播放| 国产精品一区二区三区四区五区 | 青青草国产成人99久久| 又粗又黑又大的吊av| 国色天香一区二区| 中文字幕色呦呦| 久久中文字幕av一区二区不卡| 欧美成人一区二区在线| 久久超级碰碰| 高清一区二区三区视频| 日韩一区二区三区精品视频第3页 日韩一区二区三区精品 | 日韩视频免费观看高清完整版| 亚洲天堂自拍偷拍| 欧美三级在线视频| 中文天堂在线视频| 在线一区二区观看| 国产女主播喷水视频在线观看 | av动漫在线看| 亚洲人体大胆视频| heyzo亚洲| 国产日本精品| www.中文字幕在线| 日韩一级网站| 精品视频免费在线播放| 亚洲一区日韩在线| 亚洲国产精品久久久久婷蜜芽| 亚洲国产mv| 久久久久久久午夜| 国产精品毛片| 国产男女激情视频| 日韩av中文字幕一区二区| 乌克兰美女av| 久久er99精品| 在线观看免费视频污| 国内精品久久久久影院色| 黄色一级片免费播放| 国产成人aaa| 国产高清自拍视频| 久久亚洲一级片| 久久久免费看片| 亚洲欧美国产毛片在线| 久久久久久欧美精品se一二三四 | 国产一级片免费视频| 欧美日韩一区二区三区四区五区| 在线免费观看高清视频| 欧美一级日韩不卡播放免费| 亚洲AV无码国产精品午夜字幕 | av成人天堂| 亚洲精品乱码久久久久久自慰| 日韩激情一二三区| 91插插插影院| 成人黄色网址在线观看| 色噜噜日韩精品欧美一区二区| 亚洲国产精品精华液2区45| 中国一级片在线观看| 午夜精品福利在线| 欧美三级网站在线观看| 欧美一区二区三区视频免费播放| 色婷婷视频在线| 视频在线观看一区二区| 牛牛精品在线视频| 国产精品1234| 日韩欧美久久| 日本一区二区三区免费看| 偷偷www综合久久久久久久| 无码专区aaaaaa免费视频| 青青草精品视频| av在线播放网址| 国产日韩av一区二区| 久久久.www| 欧美在线色视频| 亚洲第一免费视频| 国产一区二区三区直播精品电影 | 69av在线视频| 成年永久一区二区三区免费视频| 加勒比在线一区二区三区观看| 日韩免费av| 亚洲熟妇av日韩熟妇在线 | 欧美成人三级伦在线观看| 中文字幕av一区二区三区免费看 | 无码人妻精品一区二区三应用大全| 国产精品三级视频| 青青草av在线播放| 欧美一区二区性放荡片| 欧美日韩国产亚洲沙发| 欧美国产精品日韩| 亚洲色图综合| 午夜精品视频在线观看一区二区| 亚洲国产一成人久久精品| 美女网站视频黄色| 99re66热这里只有精品3直播| 国产这里有精品| 欧美日韩一二三区| 黄色av免费在线看| 97久久精品国产| 免费一级欧美片在线观看网站| 午夜精品美女久久久久av福利| 国产农村妇女精品一二区| 波多野结衣电影免费观看| 国产精品福利一区二区三区| 日韩不卡在线播放| 亚洲国产成人精品电影| 日韩av毛片| 91丝袜美腿美女视频网站| 成人在线免费观看视频| 北条麻妃69av| 成人av午夜电影| 欧美成人精品欧美一级私黄| 欧美福利电影网| 97视频精彩视频在线观看| 日韩美女在线观看| 伊人久久大香线蕉| 日韩精品视频久久| 99国产精品视频免费观看| 国产精品a成v人在线播放| 欧美一区二区视频网站| 成视频免费观看在线看| 成人性生交xxxxx网站| 99久久精品费精品国产| 一级黄色录像在线观看| 国产精品久久三区| 中文字幕在线日亚洲9| 少妇精69xxtheporn| 深夜福利亚洲| 国产对白在线播放| 国内外成人在线| 岛国毛片在线观看| 精品日产卡一卡二卡麻豆| 中文av资源在线| 成人在线观看91| 99精品视频免费| 一级黄色片大全| 欧美在线影院一区二区| 永久免费在线观看视频| 成人国产精品免费视频| 91超碰成人| 久久久久国产免费| 午夜精品爽啪视频| 日中文字幕在线| 国产精品678| 久久精品久久久| 亚洲AV成人精品| 狠狠躁天天躁日日躁欧美| 国产黄在线观看| 国产日韩在线免费| 欧美日本一区二区视频在线观看 | 97精品免费视频| 久草精品在线| 91福利免费观看| 亚洲va欧美va人人爽| 国产午夜在线视频| 91在线观看免费| 一区二区国产精品| 中国特黄一级片| 日韩欧美三级在线| 无码小电影在线观看网站免费| 亚洲乱码国产乱码精品天美传媒| 国产一区二区三区在线看麻豆| 精品小视频在线观看| 国产亚洲精品久久久久久牛牛 | 好吊日av在线| 欧美一区二区三区四区五区六区| 美女诱惑一区二区| 久一视频在线观看| 一本色道久久综合亚洲精品小说| 色综合一区二区日本韩国亚洲 | 奇米精品一区二区三区在线观看 | 一区二区在线| 风间由美一二三区av片| 欧美高清精品3d| 一区一区三区| 特级西西444| 国产亚洲短视频| 亚洲国产成人精品一区二区三区| 日本中文字幕久久看| 国语自产精品视频在线看8查询8| 欧美激情久久久久久久| 亚洲第一级黄色片| 99综合久久|