偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

MySQL中添加新列時(shí)一定會(huì)鎖表嗎?

數(shù)據(jù)庫(kù) MySQL
MySQL 8.0 在處理大數(shù)據(jù)表增加字段的情況下進(jìn)行了一些優(yōu)化,進(jìn)一步優(yōu)化了減少對(duì)表的鎖定時(shí)間和降低性能影響。在MySQL8.0中,還引入了Invisible Indexes、Instant DDL和In-Place Alter升級(jí)等新功能,可以進(jìn)一步提高M(jìn)ySQL的性能和可維護(hù)性。

一、鎖的概念

1.1 鎖的分類(lèi)

鎖的分類(lèi)可以從多個(gè)方面來(lái)劃分。

圖片圖片

從對(duì)數(shù)據(jù)操作類(lèi)型分

  • 讀鎖(共享鎖) : 針對(duì)同一份數(shù)據(jù),多個(gè)讀操作可以同時(shí)進(jìn)行而不會(huì)互相影響。
  • 寫(xiě)鎖(排它鎖) : 當(dāng)前寫(xiě)操作沒(méi)有完成前,它會(huì)阻斷其他寫(xiě)鎖和讀鎖。

從對(duì)數(shù)據(jù)操作粒度分

  • 表鎖
  • 行鎖

表鎖也是是InnoDB存儲(chǔ)引擎中的一種鎖機(jī)制,用于控制對(duì)表的并發(fā)訪(fǎng)問(wèn)。InnoDB表鎖包括共享鎖(Shared Lock)和排他鎖(Exclusive Lock),用于實(shí)現(xiàn)不同程度的并發(fā)讀寫(xiě)操作。嚴(yán)格意義上來(lái)說(shuō),InnoDB存儲(chǔ)引擎沒(méi)有MyISAM存儲(chǔ)引擎那種直接的完整的表級(jí)鎖。

1.2 InnoDB表鎖的特點(diǎn)和使用方式

圖片圖片

  • InnoDB表鎖是自動(dòng)隱式鎖定的,不需要手動(dòng)指定。
  • InnoDB存儲(chǔ)引擎默認(rèn)采用行級(jí)鎖(Row-Level Locking)而不是表級(jí)鎖。這意味著在InnoDB中,鎖定的粒度更細(xì),可以同時(shí)支持并發(fā)讀寫(xiě)操作,減少了鎖沖突和阻塞的可能性。
  • InnoDB采用多版本并發(fā)控制(MVCC)機(jī)制,讀取操作不會(huì)阻塞寫(xiě)入操作,寫(xiě)入操作也不會(huì)阻塞讀取操作,提高了并發(fā)性能。
  • InnoDB表鎖在事務(wù)中使用,并且鎖的持有時(shí)間盡可能短,以減少阻塞和沖突的可能性。
  • InnoDB表鎖的具體行為受到事務(wù)的隔離級(jí)別和鎖定模式的影響。通過(guò)設(shè)置合適的隔離級(jí)別和鎖定模式,可以平衡并發(fā)性能和數(shù)據(jù)一致性的要求。

二、給數(shù)據(jù)表增加一列,一定會(huì)鎖表嗎?

在 MySQL 中,使用 InnoDB 存儲(chǔ)引擎給數(shù)據(jù)表增加一列時(shí),并不一定會(huì)鎖表。InnoDB 存儲(chǔ)引擎提供了一些機(jī)制來(lái)減少對(duì)表的鎖定,以提高并發(fā)性能。

2.1 MySQL 5.6 會(huì)不會(huì)鎖表

從 MySQL 5.6 版本開(kāi)始,InnoDB 引擎引入了在線(xiàn)數(shù)據(jù)定義語(yǔ)言(DDL)操作,其中包括對(duì)表結(jié)構(gòu)的修改。這些在線(xiàn) DDL 操作允許在不鎖定整個(gè)表的情況下進(jìn)行結(jié)構(gòu)更改,具體來(lái)說(shuō),以下是可能的情況:

  • 對(duì)于增加非空列: 在 InnoDB 中,增加非空列時(shí),會(huì)執(zhí)行一個(gè)快速的元數(shù)據(jù)操作,不會(huì)鎖定整個(gè)表。這意味著在修改期間,其他會(huì)話(huà)可以繼續(xù)讀取和寫(xiě)入表數(shù)據(jù)。
  • 對(duì)于增加可為空列: 在 InnoDB 中,增加可為空列時(shí),也會(huì)執(zhí)行一個(gè)快速的元數(shù)據(jù)操作,不會(huì)鎖定整個(gè)表。其他會(huì)話(huà)可以繼續(xù)讀取和寫(xiě)入表數(shù)據(jù),但在修改期間,可能會(huì)有一些短暫的行鎖定。

注意:盡管 InnoDB 存儲(chǔ)引擎提供了較少的鎖定,但在執(zhí)行 ALTER TABLE 語(yǔ)句時(shí)仍可能會(huì)有一些性能影響。這可能是由于內(nèi)部的元數(shù)據(jù)操作、數(shù)據(jù)重組或日志寫(xiě)入等引起的。

因此,在對(duì)大型表進(jìn)行結(jié)構(gòu)修改時(shí),仍建議在低負(fù)載時(shí)執(zhí)行,以最小化對(duì)應(yīng)用程序的影響。

針對(duì)上面的問(wèn)題,MySQL8.0做了更多的優(yōu)化和升級(jí)

2.2 MySQL 8.0 會(huì)不會(huì)鎖表

MySQL 8.0 在處理大數(shù)據(jù)表增加字段的情況下進(jìn)行了一些優(yōu)化,進(jìn)一步優(yōu)化了減少對(duì)表的鎖定時(shí)間和降低性能影響。在MySQL8.0中,還引入了Invisible Indexes、Instant DDL和In-Place Alter升級(jí)等新功能,可以進(jìn)一步提高M(jìn)ySQL的性能和可維護(hù)性。

  • 原子 DDL: MySQL 8.0 引入了原子 DDL(Atomic DDL)操作,這意味著 ALTER TABLE 語(yǔ)句的執(zhí)行過(guò)程中將會(huì)有更少的阻塞。在增加字段的情況下,原子 DDL 機(jī)制可以減少對(duì)表的鎖定時(shí)間,并允許其他會(huì)話(huà)繼續(xù)讀取和寫(xiě)入數(shù)據(jù)。
  • 立即更新元數(shù)據(jù): MySQL 8.0 在增加字段時(shí)立即更新表的元數(shù)據(jù),而不需要等待整個(gè)操作完成。這樣可以更快地完成 ALTER TABLE 操作,并減少對(duì)表的鎖定時(shí)間。
  • InnoDB 引擎優(yōu)化: MySQL 8.0 的 InnoDB 存儲(chǔ)引擎針對(duì)大數(shù)據(jù)表的結(jié)構(gòu)修改進(jìn)行了一些優(yōu)化。例如,對(duì)于增加非空字段,InnoDB 不再需要復(fù)制整個(gè)表的數(shù)據(jù)。相反,它會(huì)使用一種更輕量級(jí)的操作來(lái)添加新字段,從而減少鎖定時(shí)間和資源消耗。
  • 增量元數(shù)據(jù)更新: MySQL 8.0 引入了增量元數(shù)據(jù)更新,這意味著在 ALTER TABLE 操作期間只需更新受影響的元數(shù)據(jù)信息,而不是整個(gè)表。這樣可以減少鎖定時(shí)間和操作的開(kāi)銷(xiāo)。

三、總結(jié)

總結(jié)上面的所有內(nèi)容,實(shí)際就是單純的增加一個(gè)字段,表結(jié)構(gòu)修改和索引添加通常不會(huì)鎖定整個(gè)表,在某些情況下,MySQL可能需要鎖定整個(gè)表。同時(shí)數(shù)據(jù)量過(guò)大的時(shí)候,會(huì)出現(xiàn)一些性能問(wèn)題,所以我們實(shí)際操作的過(guò)程中,一定要關(guān)注表的數(shù)據(jù)多小,最終的數(shù)據(jù)大?。ㄟ@里要關(guān)注索引數(shù)據(jù))。

責(zé)任編輯:武曉燕 來(lái)源: 一安未來(lái)
相關(guān)推薦

2024-06-20 12:38:07

2024-06-20 08:03:35

MySQL數(shù)據(jù)表版本

2024-08-05 10:13:59

MySQL大數(shù)據(jù)優(yōu)化

2023-12-25 09:03:33

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

2023-12-30 10:59:03

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

2025-04-03 09:51:37

2023-12-18 13:10:00

finally死鎖JVM 崩潰

2009-03-10 19:04:58

服務(wù)器虛擬化IDC

2023-02-24 08:19:59

MySQL索引失效

2021-07-07 10:45:20

MySQL表級(jí)鎖MyISAM

2010-11-17 11:11:44

跳槽

2024-11-13 15:29:08

MySQL技術(shù)索引

2013-09-26 09:22:14

2019-03-26 09:45:42

Python編程語(yǔ)言面試題

2025-02-10 09:58:48

2022-04-02 06:43:44

CLI 工具Fig終端自動(dòng)補(bǔ)全

2015-04-16 09:48:12

APP測(cè)試

2015-10-12 11:26:12

iOS 9適配

2022-02-07 09:02:00

汽車(chē)智能技術(shù)

2017-11-14 15:22:06

ReactNativeAppBugly
點(diǎn)贊
收藏

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