分區表是將一張表分成多張獨立子表,每個子表是一個區,目的是提高查詢效率。
從 server 層來看,只有一張表。但是從引擎層來看,是多張表,對應多個.idb文件。引擎層訪問數據只訪問特定分區表,也只對特定分區表加鎖,可以減小鎖范圍。
但是 server 層加的鎖,比如 MDL 鎖,就會加到它認為的一張表,實際上是所有分區表上。加 MDL 鎖的目的是確保所有分區表結構一致。同時會造成如下場景:對一個分區執行 truncate 語句,試圖獲取 MDL 寫鎖,與表的查詢語句(獲取 MDL 讀鎖)沖突。
分區表的典型應用場景是歸檔表,分區直觀簡潔,業務代碼也更清晰。而且清理特定分區數據,不會影響其他分區。