掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
索引主要是用于提高數(shù)據(jù)檢索速度的一種機制,通過索引數(shù)據(jù)庫可以快速定位到目標(biāo)數(shù)據(jù)的位置,而不需要遍歷整個數(shù)據(jù)集,它就像書籍的目錄部分,有它的存在,可以大大加速查詢的效率。

郾城ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
那么問題來了:在創(chuàng)建索引時一定會鎖表嗎?
如果你看的是網(wǎng)上的一些資料,或者是通過 chatgpt,那么很可能得到的結(jié)果是這樣的“是的,創(chuàng)建索引時是會鎖表的?!保@個回答是不正確的,為什么呢?
因為在 MySQL 5.6 之前,創(chuàng)建索引時會鎖表,所以,在早期 MySQL 版本中一定要在線上慎用,因為創(chuàng)建索引時會導(dǎo)致其他會話阻塞(select 查詢命令除外)。
但這個問題,在 MySQL 5.6.7 版本中得到了改變,因為在 MySQL 5.6.7 中引入了 Online DDL 技術(shù)(在線 DDL 技術(shù)),它允許在創(chuàng)建索引時,不阻塞其他會話(所有的 DML 操作都可以一起并發(fā)執(zhí)行)。
DDL(Data Definition Language,數(shù)據(jù)庫定義語言):用于定義和管理數(shù)據(jù)庫的結(jié)構(gòu),它主要包括以下語句:
DML (Data Manipulation Language,數(shù)據(jù)操作語言) :用于查詢和修改數(shù)據(jù),它主要包括以下語句:
Online DDL(Online Data Definition Language,在線數(shù)據(jù)定義語言)是指在數(shù)據(jù)庫運行期間執(zhí)行對表結(jié)構(gòu)或其他數(shù)據(jù)庫對象的更改操作,而不需要中斷或阻塞其他正在進(jìn)行的事務(wù)和查詢。
Online DDL 官方介紹文檔:https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html
Online DDL 最重要操作定義如下:
簡單翻譯一下以上內(nèi)容:
從上面的表格可以看出,有了 Online DDL 技術(shù)之后,在添加索引時,會對原本進(jìn)行操作,并且允許和 DML(數(shù)據(jù)操作語言 INSERT、UPDATE、DELETE、SELECT)一起并發(fā)執(zhí)行了。
在 MySQL 5.6 之前,創(chuàng)建索引時會鎖表,但在 MySQL 5.6.7 之后,因為新增了 Online DDL 技術(shù),所以此時在添加索引時,是可以和 DML 數(shù)據(jù)操作語言 INSERT、UPDATE、DELETE、SELECT 等命令一起執(zhí)行的。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流