一文帶你深入了解?MySQL的鎖機制
1. 什么是鎖及其作用
鎖是數(shù)據(jù)庫管理系統(tǒng)提供的一種機制,用于控制并發(fā)訪問時的數(shù)據(jù)訪問權(quán)限。鎖的作用是保證數(shù)據(jù)的一致性,避免并發(fā)操作引發(fā)的問題,如丟失更新、臟讀和不可重復(fù)讀等。
鎖的概念
MySQL鎖是用于控制并發(fā)訪問MySQL數(shù)據(jù)庫中數(shù)據(jù)的機制。在多個并發(fā)連接或事務(wù)同時訪問數(shù)據(jù)庫時,MySQL鎖可以確保數(shù)據(jù)的一致性和完整性。MySQL提供了多種類型的鎖,包括共享鎖、排他鎖和行級鎖。
共享鎖(Shared Lock)允許多個事務(wù)或連接同時讀取同一份數(shù)據(jù),但不允許對該數(shù)據(jù)進行修改。共享鎖適用于讀取密集型操作,它們之間互相不會產(chǎn)生沖突。
排他鎖(Exclusive Lock)只允許一個事務(wù)或連接對數(shù)據(jù)進行寫操作,其他事務(wù)或連接無法讀取或?qū)懭朐摂?shù)據(jù)。排他鎖適用于寫入密集型操作,可以確保數(shù)據(jù)的獨占性。
行級鎖(Row-level Lock)是MySQL中最靈活的鎖類型,它允許對數(shù)據(jù)庫表的單個行進行鎖定。行級鎖可以提供更細(xì)粒度的并發(fā)控制,允許多個事務(wù)或連接同時讀取或修改不同的行,從而提高并發(fā)性能。
MySQL鎖的作用和重要性
MySQL鎖在數(shù)據(jù)庫系統(tǒng)中起著關(guān)鍵的作用。它們用于控制并發(fā)訪問數(shù)據(jù)庫中的數(shù)據(jù),確保數(shù)據(jù)的一致性、完整性和可預(yù)測性。合理使用和管理MySQL鎖對于確保數(shù)據(jù)庫的正確性和可靠性至關(guān)重要。
- 并發(fā)控制:在并發(fā)環(huán)境下,多個事務(wù)或連接可能同時訪問數(shù)據(jù)庫。MySQL鎖確保事務(wù)之間的互斥和協(xié)調(diào),防止數(shù)據(jù)不一致和競態(tài)條件的發(fā)生。
- 數(shù)據(jù)完整性:MySQL鎖可以保護數(shù)據(jù)的完整性,防止多個事務(wù)同時對同一份數(shù)據(jù)進行修改,避免數(shù)據(jù)損壞或不一致的問題。
- 數(shù)據(jù)一致性:通過適當(dāng)使用鎖,可以確保讀取操作只讀取已提交的數(shù)據(jù),并阻止未提交的修改對其他事務(wù)的可見性,從而維護數(shù)據(jù)的一致性。
- 性能優(yōu)化:合理使用MySQL鎖可以提高并發(fā)性能。例如,使用行級鎖可以減少鎖沖突,允許并發(fā)讀取和修改不同的行,提高系統(tǒng)的吞吐量。
- 避免數(shù)據(jù)競爭:在多個并發(fā)操作中,如果沒有適當(dāng)?shù)逆i機制,可能會導(dǎo)致數(shù)據(jù)競爭和不確定的結(jié)果。MySQL鎖確保操作的順序和結(jié)果可預(yù)測,避免數(shù)據(jù)競爭問題。
2. MySQL 鎖的分類
MySQL 鎖分為共享鎖和排他鎖。共享鎖(Shared Lock)允許多個事務(wù)同時讀取數(shù)據(jù),但阻止其他事務(wù)對同一數(shù)據(jù)進行寫操作。排他鎖(Exclusive Lock)則要求獨占訪問,即在事務(wù)修改數(shù)據(jù)期間,其他事務(wù)無法讀取或修改該數(shù)據(jù)。
此外,鎖還可以根據(jù)鎖定的粒度分為行級鎖和表級鎖。行級鎖只鎖定特定的行,允許并發(fā)訪問表中其他行;而表級鎖則鎖定整個表,限制了并發(fā)操作的能力。
共享鎖(Shared Lock)和排他鎖(Exclusive Lock)的區(qū)別和用途
共享鎖(Shared Lock)和排他鎖(Exclusive Lock)是MySQL中常用的兩種鎖類型,它們有不同的特點和用途。
區(qū)別和用途:
- 共享鎖(Shared Lock):允許多個事務(wù)或連接同時讀取同一份數(shù)據(jù),但不允許對該數(shù)據(jù)進行修改。共享鎖適用于讀取密集型操作,可以提供并發(fā)讀取的能力。多個事務(wù)可以同時持有共享鎖,它們之間不會互相阻塞。當(dāng)一個事務(wù)持有共享鎖時,其他事務(wù)可以讀取該數(shù)據(jù),但無法獲取排他鎖。共享鎖不會阻止其他事務(wù)獲取共享鎖,因為多個事務(wù)可以同時持有共享鎖,但會阻止其他事務(wù)獲取排他鎖。
- 排他鎖(Exclusive Lock):只允許一個事務(wù)或連接對數(shù)據(jù)進行寫操作,其他事務(wù)或連接無法讀取或?qū)懭朐摂?shù)據(jù)。排他鎖適用于寫入密集型操作,它提供了對數(shù)據(jù)的獨占訪問。當(dāng)一個事務(wù)持有排他鎖時,其他事務(wù)無法獲取共享鎖或排他鎖,它們會等待排他鎖釋放。排他鎖阻塞其他事務(wù)的讀取和寫入操作,保證了數(shù)據(jù)的獨占性。
行級鎖和表級鎖的對比
行級鎖和表級鎖是MySQL中兩種不同的粒度鎖,它們在鎖定數(shù)據(jù)的范圍和并發(fā)性方面有所差異。
行級鎖(Row-level Lock):行級鎖是在數(shù)據(jù)庫表的單個行上進行鎖定。行級鎖提供了最細(xì)粒度的鎖控制,允許多個事務(wù)或連接同時讀取或修改不同的行。行級鎖可以最大程度地提高并發(fā)性,不同的事務(wù)可以同時操作不同的行,減少了鎖沖突的可能性。然而,行級鎖的管理和維護開銷較大,可能會導(dǎo)致鎖競爭和性能下降。
表級鎖(Table-level Lock):表級鎖是在整個數(shù)據(jù)庫表上進行鎖定。當(dāng)一個事務(wù)持有表級鎖時,其他事務(wù)無法對該表進行讀取或?qū)懭氩僮?。表級鎖提供了簡單的鎖管理,但也限制了并發(fā)性能。由于鎖定的粒度較大,多個事務(wù)無法同時對表的不同行進行操作,可能導(dǎo)致阻塞和性能瓶頸。
3.鎖的實現(xiàn)方式
在MySQL中,鎖的實現(xiàn)方式包括記錄鎖(Record Lock)、間隙鎖(Gap Lock)、臨鍵鎖(Next-Key Lock)和表鎖(Table Lock)。這些鎖實現(xiàn)方式的選擇取決于具體的需求和情況。
記錄鎖(Record Lock):
- 概念:記錄鎖是在數(shù)據(jù)庫表的記錄(行)級別上進行的鎖定。
- 作用:它允許事務(wù)對特定記錄進行獨占或共享訪問,以確保并發(fā)事務(wù)的隔離性和一致性。
- 使用場景:記錄鎖適用于對單個記錄進行讀取和寫入操作的情況,例如更新或刪除特定的行。
間隙鎖(Gap Lock):
- 概念:間隙鎖是在索引范圍內(nèi)的空隙(記錄之間的間隔)上進行的鎖定。
- 作用:它用于防止其他事務(wù)在同一范圍內(nèi)插入新記錄,以保持范圍的一致性。
- 使用場景:間隙鎖主要用于防止幻讀問題,即其他事務(wù)在鎖定范圍內(nèi)插入新記錄,導(dǎo)致已讀取的記錄集合發(fā)生變化。
臨鍵鎖(Next-Key Lock):
- 概念:臨鍵鎖是記錄鎖和間隙鎖的組合,用于實現(xiàn)行級別的一致性讀取和防止幻讀。
- 作用:臨鍵鎖既鎖定了記錄本身,也鎖定了記錄之間的間隙,確保讀取的結(jié)果是一致的。
- 使用場景:臨鍵鎖在具有索引的表上執(zhí)行范圍查詢時使用,以確保讀取的記錄集合是連續(xù)的、不會受到其他事務(wù)的干擾。
表鎖(Table Lock):
- 概念:表鎖是在整個表級別上進行的鎖定。
- 作用:它可以對整個表進行獨占或共享訪問,確保對整個表的操作的完整性和一致性。
- 使用場景:表鎖適用于特定的情況,例如進行表結(jié)構(gòu)的修改、備份或?qū)С鰯?shù)據(jù)等操作,需要鎖定整個表。
需要注意的是,記錄鎖、間隙鎖和臨鍵鎖都是InnoDB存儲引擎實現(xiàn)的鎖機制,而表鎖適用于所有存儲引擎。MySQL會根據(jù)具體的語句和事務(wù)隔離級別自動選擇合適的鎖機制來確保數(shù)據(jù)的一致性和并發(fā)控制。合理地使用這些鎖機制可以提高數(shù)據(jù)庫的性能和并發(fā)性。
4.鎖的使用場景和注意事項
使用場景和注意事項:
并發(fā)讀取場景下的鎖應(yīng)用:
- 使用共享鎖(Shared Lock)來實現(xiàn)讀取操作的并發(fā)性,允許多個事務(wù)同時讀取相同的數(shù)據(jù)。
- 并發(fā)讀取場景包括讀取密集型應(yīng)用,如報表查詢、數(shù)據(jù)統(tǒng)計等。
- 注意事項:確保讀取操作不會對數(shù)據(jù)造成修改,避免誤用排他鎖(Exclusive Lock)導(dǎo)致阻塞其他讀操作。
并發(fā)寫入場景下的鎖應(yīng)用:
- 使用排他鎖(Exclusive Lock)來實現(xiàn)寫入操作的互斥性,確保只有一個事務(wù)可以修改數(shù)據(jù)。
- 并發(fā)寫入場景包括更新、刪除、插入等寫入操作。
- 注意事項:避免長時間持有鎖,盡快完成寫入操作,以減少對其他事務(wù)的阻塞時間。
鎖的粒度選擇和權(quán)衡:
行級鎖(Record Lock):
- 行級鎖提供最細(xì)粒度的并發(fā)控制,允許多個事務(wù)同時操作不同的行。
- 適用于高并發(fā)讀寫混合場景,保證并發(fā)性能和數(shù)據(jù)一致性。
- 行級鎖會增加鎖管理開銷,可能導(dǎo)致鎖競爭和性能下降。
表級鎖(Table Lock):
- 表級鎖是在整個表上進行鎖定,提供簡單的鎖管理。
- 適用于對整個表進行操作的場景,如表結(jié)構(gòu)修改、備份等。
- 表級鎖的粒度較大,會限制并發(fā)性能,可能導(dǎo)致阻塞和性能瓶頸。
間隙鎖(Gap Lock)和臨鍵鎖(Next-Key Lock):
- 間隙鎖和臨鍵鎖是在索引范圍內(nèi)的間隙和臨近鍵值之間進行的鎖定。
- 適用于范圍查詢場景,防止幻讀問題和保證范圍查詢的一致性。
- 間隙鎖和臨鍵鎖在InnoDB存儲引擎中實現(xiàn)。
避免死鎖的策略和技巧:
定義良好的事務(wù)順序:
- 確保事務(wù)按照相同的順序訪問鎖資源,避免循環(huán)依賴導(dǎo)致的死鎖。
- 統(tǒng)一事務(wù)的訪問順序,可以通過為數(shù)據(jù)對象按順序加鎖,或按事務(wù)ID順序申請鎖來實現(xiàn)。
設(shè)置適當(dāng)?shù)逆i超時機制:
- 為鎖設(shè)置合理的超時時間,當(dāng)事務(wù)等待鎖的時間超過閾值時,自動放棄鎖并進行回滾操作。
- 超時機制可以減少長時間持有鎖導(dǎo)致的死鎖風(fēng)險,避免事務(wù)長時間阻塞其他事務(wù)。
減少事務(wù)持有時間:
- 盡量縮短事務(wù)的執(zhí)行時間,減少事務(wù)持有鎖的時間窗口,降低死鎖風(fēng)險。
- 將事務(wù)劃分為較小的、短期執(zhí)行的子事務(wù),減少鎖競爭和阻塞時間。
避免長事務(wù):
- 長時間運行的事務(wù)增加了死鎖的概率,容易造成資源爭用和性能下降。
- 設(shè)計和優(yōu)化事務(wù),將復(fù)雜的長事務(wù)拆分為多個短事務(wù),以減少長事務(wù)的存在。
綜上所述,合理選擇和使用MySQL鎖,根據(jù)具體的場景和需求選擇合適的鎖粒度、遵循鎖的使用原則,以及采取避免死鎖的策略和技巧,可以提高數(shù)據(jù)庫的性能、并發(fā)控制和數(shù)據(jù)一致性。
5. 優(yōu)化和調(diào)試鎖問題
為了優(yōu)化性能和調(diào)試鎖問題,可以采用以下策略和技術(shù):
鎖優(yōu)化:
- 使用合適的索引:良好的索引設(shè)計可以減少鎖的范圍,提高查詢效率,減少鎖沖突。
- 減少事務(wù)持有鎖的時間:盡量縮短事務(wù)的執(zhí)行時間,降低鎖的競爭和沖突風(fēng)險。
- 避免不必要的鎖:只在必要的地方使用鎖,避免過度使用鎖導(dǎo)致性能下降。
調(diào)試鎖問題:
- 使用SHOW ENGINE INNODB STATUS命令:該命令可以查看InnoDB存儲引擎的狀態(tài)信息,包括當(dāng)前的鎖情況、等待鎖的事務(wù)等。
- 使用鎖監(jiān)控工具:可以使用Percona Toolkit或MySQL Performance Schema等工具來監(jiān)控和分析鎖的使用情況,定位鎖問題。
- 分析鎖等待鏈:通過查看InnoDB狀態(tài)信息中的"TRANSACTIONS"和"LOCK WAIT"部分,可以分析鎖等待鏈,找出造成鎖等待的事務(wù)和資源。
鎖等待和鎖競爭的分析和解決方法:
- 分析鎖等待鏈:通過查看InnoDB狀態(tài)信息中的"TRANSACTIONS"和"LOCK WAIT"部分,找出正在等待鎖資源的事務(wù),以及被等待的資源。
- 優(yōu)化查詢語句和事務(wù)順序:調(diào)整查詢語句的順序,盡量避免事務(wù)之間的競爭和沖突,減少鎖等待。
- 提高并發(fā)性能:通過合理的索引設(shè)計、拆分事務(wù)、增加服務(wù)器資源等方法,提高并發(fā)性能,減少鎖等待和競爭。
鎖定時間和性能優(yōu)化:
- 減少事務(wù)持有鎖的時間:盡量縮短事務(wù)的執(zhí)行時間,減少事務(wù)持有鎖的時間窗口,降低鎖沖突和性能損失。
- 分批處理和批量操作:對于大批量的數(shù)據(jù)操作,可以將其拆分成多個較小的批次操作,減少單個事務(wù)的鎖持有時間。
- 合理設(shè)置事務(wù)隔離級別:根據(jù)業(yè)務(wù)需求,選擇合適的事務(wù)隔離級別,避免不必要的鎖沖突。
通過以上的優(yōu)化和調(diào)試措施,可以有效解決MySQL鎖相關(guān)的性能問題,提升數(shù)據(jù)庫的并發(fā)性能和穩(wěn)定性。但需要根據(jù)具體情況進行分析和優(yōu)化,不同的應(yīng)用場景可能需要采取不同的措施。
6. 其他相關(guān)技術(shù)和策略
1. 樂觀鎖和悲觀鎖的對比
MySQL中的樂觀鎖和悲觀鎖是兩種常見的并發(fā)控制策略,用于處理多個事務(wù)同時訪問和修改相同數(shù)據(jù)時的并發(fā)沖突。它們在加鎖的時機和處理并發(fā)沖突的方式上有所不同。
- 樂觀鎖: 樂觀鎖假設(shè)并發(fā)沖突較少發(fā)生,在讀取數(shù)據(jù)時不加鎖,而是在提交事務(wù)時檢查數(shù)據(jù)是否發(fā)生了沖突。
- 讀取數(shù)據(jù)時,樂觀鎖不會阻塞其他事務(wù)的讀操作,因此讀操作可以同時進行。
- 在更新數(shù)據(jù)時,樂觀鎖會首先讀取數(shù)據(jù),并記錄讀取時的版本號或時間戳。
- 當(dāng)提交事務(wù)時,樂觀鎖會再次檢查數(shù)據(jù)是否被其他事務(wù)修改過??梢酝ㄟ^比較版本號或時間戳來判斷是否發(fā)生了沖突。
- 如果檢測到數(shù)據(jù)沖突(即其他事務(wù)已經(jīng)修改過數(shù)據(jù)),樂觀鎖會回滾事務(wù)或重新執(zhí)行事務(wù),以確保數(shù)據(jù)的一致性。
- 樂觀鎖適用于讀多寫少的場景,因為在讀操作中不會加鎖,不會阻塞其他讀操作的執(zhí)行。
- 悲觀鎖: 悲觀鎖假設(shè)并發(fā)沖突經(jīng)常發(fā)生,在訪問數(shù)據(jù)之前就加鎖,阻塞其他事務(wù)的訪問,以確保數(shù)據(jù)的完整性。
- 在訪問數(shù)據(jù)之前,悲觀鎖會直接加鎖,阻塞其他事務(wù)對數(shù)據(jù)的讀寫操作,確保當(dāng)前事務(wù)能夠獨占數(shù)據(jù)。
- 悲觀鎖通過加鎖來保護數(shù)據(jù)的完整性,其他事務(wù)必須等待鎖的釋放才能訪問數(shù)據(jù)。
- 悲觀鎖可以使用行級鎖或表級鎖來實現(xiàn),鎖的粒度較大,可能會導(dǎo)致并發(fā)性能下降。
- 悲觀鎖適用于寫多的場景,可以有效地避免并發(fā)沖突,但也會帶來較高的鎖開銷。
對比:
- 加鎖時機:樂觀鎖在讀取數(shù)據(jù)時不加鎖,而悲觀鎖在訪問數(shù)據(jù)之前就加鎖。
- 鎖的粒度:樂觀鎖的粒度較小,只在更新時檢查沖突;悲觀鎖的粒度較大,一般使用行級鎖或表級鎖。
- 并發(fā)性能:樂觀鎖由于不加鎖的特性,可以提高并發(fā)性能;悲觀鎖由于加鎖的特性,可能會降低并發(fā)性能。
- 處理沖突:樂觀鎖在提交事務(wù)時檢查沖突,如果發(fā)生沖突,則回滾或重新執(zhí)行事務(wù);悲觀鎖通過加鎖來避免沖突,等待鎖的釋放。
- 適用場景:樂觀鎖適用于讀多寫少的場景;悲觀鎖適用于寫多的場景或?qū)?shù)據(jù)一致性要求較高的場景。
在選擇樂觀鎖和悲觀鎖時,需要根據(jù)具體的業(yè)務(wù)需求和并發(fā)訪問模式進行權(quán)衡,以提供最佳的并發(fā)控制和性能。
2. 行版本控制(MVCC)的作用和原理
行版本控制(Multi-Version Concurrency Control,MVCC)是一種常見的并發(fā)控制機制,用于在多個事務(wù)同時讀寫數(shù)據(jù)庫時保證數(shù)據(jù)的一致性和并發(fā)性。MVCC的作用是實現(xiàn)事務(wù)隔離性,允許多個事務(wù)同時讀取數(shù)據(jù)庫,而不會相互干擾或讀取到不一致的數(shù)據(jù)。
MVCC的原理是在每行數(shù)據(jù)中維護多個版本,包括已提交和未提交的版本。每個事務(wù)在讀取數(shù)據(jù)時,可以看到自己開始之前已提交的數(shù)據(jù)版本,但看不到其他事務(wù)未提交的數(shù)據(jù)。這樣可以實現(xiàn)多個事務(wù)并發(fā)讀取數(shù)據(jù),而不會產(chǎn)生讀取臟數(shù)據(jù)或不可重復(fù)讀的問題。
下面是MVCC的一般原理:
- 版本記錄:每個數(shù)據(jù)庫行(記錄)都包含一個或多個版本,每個版本都有一個唯一的標(biāo)識(如版本號或時間戳)。版本信息可以存儲在數(shù)據(jù)行中,或者存儲在另外的數(shù)據(jù)結(jié)構(gòu)(如undo日志)中。
- 事務(wù)開始:當(dāng)一個事務(wù)開始時,會創(chuàng)建一個新的事務(wù)ID,并記錄當(dāng)前時間戳或版本號。
- 讀操作:當(dāng)一個事務(wù)執(zhí)行讀操作時,它會根據(jù)事務(wù)開始時的時間戳或版本號,選擇合適的數(shù)據(jù)版本進行讀取。只有已提交的版本中的數(shù)據(jù)才對當(dāng)前事務(wù)可見。
- 寫操作:當(dāng)一個事務(wù)執(zhí)行寫操作時,會創(chuàng)建一個新的數(shù)據(jù)版本,并將事務(wù)ID、時間戳或版本號與該版本關(guān)聯(lián)。新版本的數(shù)據(jù)會被寫入數(shù)據(jù)庫中,但不會立即刪除舊版本的數(shù)據(jù)。
- 數(shù)據(jù)回滾:如果一個事務(wù)回滾,那么它創(chuàng)建的所有未提交版本的數(shù)據(jù)都會被丟棄,不會對其他事務(wù)可見。
- 清理過期數(shù)據(jù):定期或在需要時,數(shù)據(jù)庫系統(tǒng)會清理過期的數(shù)據(jù)版本,以釋放空間并提高性能。過期的數(shù)據(jù)版本是指已提交但不再需要的舊版本。
MVCC的優(yōu)點是提供了更高的并發(fā)性能和事務(wù)隔離性。不同的數(shù)據(jù)庫實現(xiàn)MVCC的方式可能有所不同,但基本原理是相似的。通過使用版本控制,MVCC避免了傳統(tǒng)鎖機制帶來的阻塞和串行化問題,允許多個事務(wù)并發(fā)讀取數(shù)據(jù)庫,提高了數(shù)據(jù)庫的并發(fā)性能和吞吐量。
7. 總結(jié)
MySQL 鎖機制是保證數(shù)據(jù)庫并發(fā)訪問一致性和完整性的關(guān)鍵機制。通過合理選擇和使用不同類型的鎖,以及優(yōu)化和調(diào)試鎖問題,可以提高系統(tǒng)性能和可靠性。在實際應(yīng)用中,根據(jù)具體場景和需求,選擇合適的鎖粒度和并發(fā)控制策略,以達(dá)到最佳的數(shù)據(jù)庫訪問效果。
以上就是一文帶你深入了解 MySQL 鎖機制的詳細(xì)內(nèi)容,更多關(guān)于MySQL 鎖機制的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MySql使用存儲過程進行單表數(shù)據(jù)遷移的實現(xiàn)
近期在進行業(yè)務(wù)解耦,對冗余在一起切又屬于不同業(yè)務(wù)的代碼進行分離,同時也將數(shù)據(jù)庫進行分離存儲,那么這時候就涉及到多個表的數(shù)據(jù)要進行遷移,本文就來介紹一下MySql使用存儲過程進行單表數(shù)據(jù)遷移,感興趣的可以了解一下2023-11-11MySQL使用select語句查詢指定表中指定列(字段)的數(shù)據(jù)
本文介紹MySQL數(shù)據(jù)庫中執(zhí)行select查詢語句,查詢指定列的數(shù)據(jù),即指定字段的數(shù)據(jù),需要的朋友可以參考下2016-11-11MySql之授權(quán)用戶權(quán)限如何設(shè)置
這篇文章主要介紹了MySql之授權(quán)用戶權(quán)限如何設(shè)置問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05mysql Sort aborted: Out of sort memory, consider increasing
這篇文章主要介紹了mysql Sort aborted: Out of sort memory, consider increasing server sort buffer size的解決方法,需要的朋友可以參考下2016-05-05MySQL單表百萬數(shù)據(jù)記錄分頁性能優(yōu)化技巧
自己的一個網(wǎng)站,由于單表的數(shù)據(jù)記錄高達(dá)了一百萬條,造成數(shù)據(jù)訪問很慢,Google分析的后臺經(jīng)常報告超時,尤其是頁碼大的頁面更是慢的不行2016-08-08淺談MySQL存儲引擎選擇 InnoDB與MyISAM的優(yōu)缺點分析
MyISAM 是MySQL中默認(rèn)的存儲引擎,一般來說不是有太多人關(guān)心這個東西。決定使用什么樣的存儲引擎是一個很tricky的事情,但是還是值我們?nèi)パ芯恳幌?,這里的文章只考慮 MyISAM 和InnoDB這兩個,因為這兩個是最常見的2013-06-06