MySQL InnoDB表的限制
- 在 < 3.23.50 版本的 InnoDB 中,不可以使用 ALTER TABLE 或 CREATE INDEX 來修改一個已經有了外來鍵約束或參考了外來鍵約束的表。使用 DROP TABLE 和 CREATE TABLE 來代替它。
- 不可以將 MySQL 系統表(如 'user' 或 'host' )轉換成 InnoDB 型別。系統表必須總是為 MyISAM 型別的。
- InnoDB 表不支援全文搜尋(fulltext search)。
- MySQL 以自動提交模式(autocommit mode)執行復制(replication)。因此slave中的 consistent reads 可能看起來你部分處理過的事務,所以在 slave 中這種讀取(read)並不是真正的 consistent 。這個限制在 3.23.52 不再存在。
- InnoDB 在內部不儲存一個表記錄總數,這是由於 multiversioning 的原因使它實現有點複雜。為了響應一個查詢 SELECT COUNT(*) FROM T ,InnoDB 不得不掃描表的一個索引,如果表沒有完全在緩衝池中這將花費一些時間。 為了得到更快的計數你不得不使用自己建立一個計數表,讓你的應用程式在插入與刪除時自己更新它。 消除因鎖等待引起的瓶頸的一個方法就是建立整體的計數器集。應用程式可以隨機地每次選擇一個。 為了得到計數,僅僅只要對計數器求和:SELECT SUM(counter_column) FROM your_counter_table。
- 表中有 auto-increment 列的必須為它定義一個鍵,這個鍵必須僅僅包含這個 auto-increment 列。InnoDB 不支援在一個 CREATE TABLE 語句中使用 AUTO_INCREMENT=... 。這個子句是為了給一個 auto-increment 列設定第一個值(預設的第一個值為 1)。工作區(Workaround):向自增列中插入一個指定的值做為第一個值。從此,InnoDB 將從這值開始增加。
- SHOW TABLE STATUS 不能給出 InnoDB 表的精密統計資料,除了由表保留的物理大小之外。記錄行數只能透過一個最佳化的 SQL 來獲得大致的估計。
- 在 MySQL 中複製(replication)中,load table from master 仍然不能在 InnoDB 表中工作。 在主(master)伺服器中開設一個工作區(workaround )用於將錶轉換成 MyISAM 型,然後再進行 load,之後再在 master 中將表改回 InnoDB 型別。
- 如果以一個列的前面部分建立索引:
- InnoDB 將內在的在整個列上建立一個索引,而不是僅以設定的首部分。
- InnoDB 表不支援 INSERT DELAYED 。
- MySQL 的 LOCK TABLES 操作無法知道一個 SQL 語句已完成對 InnoDB 的行鎖定:這就意味著即使已有其它使用者的事務在同一張表上設定了行鎖,你仍然會鎖定該表。 所以你在這張表上的操作與其它使用者的鎖定衝突則不得不等待。同樣死鎖也是可能的。無論如何, 這能事務完整性(transaction integrity)並不危險,因為 InnoDB 設定的行級鎖定通常會照顧完整性(integrity)的。同樣,一個表級鎖定可以防止其它事務在表上獲得更多的行級鎖定(鎖定模式不一致)。
- 在 BLOB 或 TEXT 欄位上無法設定索引。
- 一張表不可以有超過 1000 個欄位。
- DELETE FROM TABLE 除了刪除所有記錄行之外不再重建表,一個接一個地刪除,這並不那麼快。在將來的 MySQL 版本中可以使用 TRUNCATE ,這是相當快的。
- 在 <= 3.23.43 的 InnoDB 中,在對 InnoDB 表呼叫 DROP DATABASE 之前,必須呼叫 DROP TABLE 來移除(drop) 個體的 InnoDB 表。這個限制在 >= 3.23.44 的版本中不再存在。
- InnoDB 預設的資料庫頁面大小為 16 kB。透過重新編譯原始碼可以設定為 8 kB 到 64 kB。你必須在 univ.i 中更新 UNIV_PAGE_SIZE 和 UNIV_PAGE_SIZE_SHIFT 。在版本 <= 3.23.39a 的 InnoDB中,最大記錄行長度為比資料庫頁面長度的一半稍小點。從源釋放版本 3.23.39b (但是在 MySQL -Max 3.23.40 二進位制釋放版本中仍然沒有)開始, BLOB 和 TEXT 欄位允許 < 4 GB,整個行長度同樣 < 4 GB。InnoDB 不在分開的頁面中儲存尺寸 <= 128 bytes 的欄位。在 InnoDB 透過將長欄位儲存在分開的頁面上修改記錄後,剩餘的記錄行長度必須小於資料庫頁面的一半。最大鍵長為 500 bytes。
- 日誌檔案的總尺寸必須 < 4 GB。
- 最大表空間尺寸為資料庫頁面的 4 十億(billion)倍。這同樣也是一個表的最大尺寸。最小表空間為 10 MB。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2137023/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL MyISAM引擎和InnoDB引擎對於單表大小限制的總結MySql
- mysql中的表大小限制MySql
- [MySQL5.6]Innodb新的監控表INNODB_METRICSMySql
- MySQL InnoDB表空間加密MySql加密
- MySQL:Innodb表 Data free 的計算概要MySql
- 恢復MySQL InnoDB表結構的方法MySql
- MySQL InnoDB Undo表空間配置MySql
- MySQL 5.7 查詢InnoDB鎖表MySql
- MYSQL INNODB中hash查詢表的實現MySql
- MySQL InnoDB臨時表空間配置MySql
- MySQL 減少InnoDB系統表空間的大小MySql
- MySQL innodb表使用表空間物理檔案複製表MySql
- mysql 5.6效能監控表innodb_metricsMySql
- MySQL 增加InnoDB系統表空間大小MySql
- MySQL InnoDB File-Per-Table表空間MySql
- MySQL InnoDB表--BTree基本資料結構MySql資料結構
- MySQL 5.5 InnoDB表鎖行鎖測試MySql
- MySQL InnoDB 共享表空間和獨立表空間MySql
- MySQL InnoDB 共享表空間和獨立表空間MySql
- 批量修改Mysql資料庫表Innodb為MyISANMySql資料庫
- mysql innodb 索引失效問題引起表級鎖MySql索引
- mysql innodb的行鎖MySql
- MySQL innodb_table_stats表不存在的解決方法MySql
- 初觸hibernate01--MYSQL建表時type=InnoDB和Engine=InnoDB注意點MySql
- MySQL InnoDB 索引MySql索引
- MySQL的show engine innodb statusMySql
- mysql innodb的行鎖(2)MySql
- mysql innodb的行鎖(3)MySql
- mysql innodb的行鎖(4)MySql
- 探索MySQL的InnoDB索引失效MySql索引
- MySQL 多表更新的限制MySql
- MySQL innodb共享表空間新增表空間資料檔案方法MySql
- InnoDB鎖結構個數最大限制
- MySQL InnoDB系統表空間資料檔案配置MySql
- MySQL Innodb表空間解除安裝和遷移案例MySql
- 關於MySQL InnoDB表的二級索引是否加入主鍵的總結MySql索引
- mysql innodb索引高度MySql索引
- MySQL InnoDB update流程MySql