如何理解MySQLInnoDB表的限制

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何理解MySQL InnoDB表的限制,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都地區(qū)優(yōu)秀IDC服務(wù)器托管提供商(創(chuàng)新互聯(lián)公司).為客戶提供專業(yè)的雅安服務(wù)器托管,四川各地服務(wù)器托管,雅安服務(wù)器托管、多線服務(wù)器托管.托管咨詢專線:18980820575

  • 在 < 3.23.50 版本的 InnoDB 中,不可以使用 ALTER TABLE 或 CREATE INDEX 來修改一個(gè)已經(jīng)有了外鍵約束或參考了外鍵約束的表。使用 DROP TABLE 和 CREATE TABLE 來代替它。 

  • 不可以將 MySQL 系統(tǒng)表(如 'user' 或 'host' )轉(zhuǎn)換成 InnoDB 類型。系統(tǒng)表必須總是為 MyISAM 類型的。 

  • InnoDB 表不支持全文搜索(fulltext search)。 

  • MySQL 以自動提交模式(autocommit mode)執(zhí)行復(fù)制(replication)。因此slave中的 consistent reads 可能看起來你部分處理過的事務(wù),所以在 slave 中這種讀取(read)并不是真正的 consistent 。這個(gè)限制在 3.23.52 不再存在。 

  • InnoDB 在內(nèi)部不保存一個(gè)表記錄總數(shù),這是由于 multiversioning 的原因使它實(shí)現(xiàn)有點(diǎn)復(fù)雜。為了響應(yīng)一個(gè)查詢 SELECT COUNT(*) FROM T ,InnoDB 不得不掃描表的一個(gè)索引,如果表沒有完全在緩沖池中這將花費(fèi)一些時(shí)間。 為了得到更快的計(jì)數(shù)你不得不使用自己創(chuàng)建一個(gè)計(jì)數(shù)表,讓你的應(yīng)用程序在插入與刪除時(shí)自己更新它。 消除因鎖等待引起的瓶頸的一個(gè)方法就是創(chuàng)建整體的計(jì)數(shù)器集。應(yīng)用程序可以隨機(jī)地每次選擇一個(gè)。 為了得到計(jì)數(shù),僅僅只要對計(jì)數(shù)器求和:SELECT SUM(counter_column) FROM your_counter_table。 

  • 表中有 auto-increment 列的必須為它定義一個(gè)鍵,這個(gè)鍵必須僅僅包含這個(gè) auto-increment 列。InnoDB 不支持在一個(gè) CREATE TABLE 語句中使用 AUTO_INCREMENT=... 。這個(gè)子句是為了給一個(gè) auto-increment 列設(shè)置第一個(gè)值(默認(rèn)的第一個(gè)值為 1)。工作區(qū)(Workaround):向自增列中插入一個(gè)指定的值做為第一個(gè)值。從此,InnoDB 將從這值開始增加。 

  • SHOW TABLE STATUS 不能給出 InnoDB 表的精密統(tǒng)計(jì)數(shù)據(jù),除了由表保留的物理大小之外。記錄行數(shù)只能通過一個(gè)優(yōu)化的 SQL 來獲得大致的估計(jì)。 

  • 在 MySQL 中復(fù)制(replication)中,load table from master 仍然不能在 InnoDB 表中工作。 在主(master)服務(wù)器中開設(shè)一個(gè)工作區(qū)(workaround )用于將表轉(zhuǎn)換成 MyISAM 型,然后再進(jìn)行 load,之后再在 master 中將表改回 InnoDB 類型。 

  • 如果以一個(gè)列的前面部分建立索引: 

         CREATE TABLE T (A CHAR(20), B INT, INDEX T_IND (A(5))) TYPE = InnoDB;

  • InnoDB 將內(nèi)在的在整個(gè)列上建立一個(gè)索引,而不是僅以設(shè)定的首部分。 

  • InnoDB 表不支持 INSERT DELAYED 。 

  • MySQL 的 LOCK TABLES 操作無法知道一個(gè) SQL 語句已完成對 InnoDB 的行鎖定:這就意味著即使已有其它用戶的事務(wù)在同一張表上設(shè)置了行鎖,你仍然會鎖定該表。 所以你在這張表上的操作與其它用戶的鎖定沖突則不得不等待。同樣死鎖也是可能的。無論如何, 這能事務(wù)完整性(transaction integrity)并不危險(xiǎn),因?yàn)?InnoDB 設(shè)置的行級鎖定通常會照顧完整性(integrity)的。同樣,一個(gè)表級鎖定可以防止其它事務(wù)在表上獲得更多的行級鎖定(鎖定模式不一致)。 

  • 在 BLOB 或 TEXT 字段上無法設(shè)置索引。 

  • 一張表不可以有超過 1000 個(gè)字段。 

  • DELETE FROM TABLE 除了刪除所有記錄行之外不再重建表,一個(gè)接一個(gè)地刪除,這并不那么快。在將來的 MySQL 版本中可以使用 TRUNCATE ,這是相當(dāng)快的。 

  • 在 <= 3.23.43 的 InnoDB 中,在對 InnoDB 表調(diào)用 DROP DATABASE 之前,必須調(diào)用 DROP TABLE 來移除(drop) 個(gè)體的 InnoDB 表。這個(gè)限制在 >= 3.23.44 的版本中不再存在。 

  • InnoDB 默認(rèn)的數(shù)據(jù)庫頁面大小為 16 kB。通過重新編譯源代碼可以設(shè)置為 8 kB 到 64 kB。你必須在 univ.i 中更新 UNIV_PAGE_SIZE 和 UNIV_PAGE_SIZE_SHIFT 。在版本 <= 3.23.39a 的 InnoDB中,最大記錄行長度為比數(shù)據(jù)庫頁面長度的一半稍小點(diǎn)。從源釋放版本 3.23.39b (但是在 MySQL -Max 3.23.40 二進(jìn)制釋放版本中仍然沒有)開始, BLOB 和 TEXT 字段允許 < 4 GB,整個(gè)行長度同樣 < 4 GB。InnoDB 不在分開的頁面中存儲尺寸 <= 128 bytes 的字段。在 InnoDB 通過將長字段存儲在分開的頁面上修改記錄后,剩余的記錄行長度必須小于數(shù)據(jù)庫頁面的一半。最大鍵長為 500 bytes。 

  • 日志文件的總尺寸必須 < 4 GB。 

  • 最大表空間尺寸為數(shù)據(jù)庫頁面的 4 十億(billion)倍。這同樣也是一個(gè)表的最大尺寸。最小表空間為 10 MB。 

上述就是小編為大家分享的如何理解MySQL InnoDB表的限制了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享題目:如何理解MySQLInnoDB表的限制
網(wǎng)站地址:http://muchs.cn/article38/geppsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、動態(tài)網(wǎng)站、電子商務(wù)網(wǎng)站制作、虛擬主機(jī)、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化