innodb儲存引擎
innodb是事務型資料庫的首選引擎,支援事務安全表(acid),支援行鎖定和外來鍵,上圖也看到了,innodb是預設的mysql引擎。
innodb 採用mvcc(多版本併發控制)來支援高併發,並實現了四個標準的隔離級別。其預設級別是repeatable read(可重複讀),並且通過間隙鎖(next-key locking)策略防止幻讀的出現。間隙鎖是的 innodb 不僅僅鎖定查詢涉及的行,還會對索引中的間隙進行鎖定,以防止幻影行的插入。
innodb 表是基於聚簇索引建立的。innodb 的索引結構和 mysql 的其他儲存引擎有很大不同,聚簇索引對主鍵查詢有很高的效能。不過它的二級索引(secondary index,非主鍵索引)中必須包含主鍵列,所以如果主鍵很大的話,其他的所有索引都會很大。因此,若表上的索引較多的話,主鍵應當盡可能的小。
innodb不建立目錄,使用innodb時,mysql將在mysql資料目錄下建立乙個名為ibdata1的10mb大小的自動擴充套件資料檔案,以及兩個名為ib_logfile0和ib_logfile1的5mb大小的日誌檔案。
innodb主要特性有:
innodb給mysql提供了具有提交、回滾和崩潰恢復能力的事物安全(acid相容)儲存引擎。innodb鎖定在行級並且也在select語句中提供乙個類似oracle的非鎖定讀。這些功能增加了多使用者部署和效能。在sql查詢中,可以自由地將innodb型別 的表和其他mysql的表型別混合起來,甚至在同乙個查詢中也可以混合
innodb是為處理巨大資料量的最大效能設計。它的cpu效率可能是任何其他基於磁碟的關係型資料庫引擎鎖不能匹敵的
innodb儲存引擎完全與mysql伺服器整合,innodb儲存引擎為在主記憶體中快取資料和索引而維持它自己的緩衝池。innodb將它的表和索引在乙個邏輯表空間中,表空間可以包含數個檔案(或原始磁碟檔案)。這與myisam表不同,比如在myisam表中每個表被存放在分離的檔案中。innodb表可以是任何尺寸,即使在檔案尺寸被限制為2gb的作業系統上
innodb支援外來鍵完整性約束,儲存表中的資料時,每張表的儲存都按主鍵順序存放,如果沒有顯示在表定義時指定主鍵, innodb會為每一行生成乙個6位元組的rowid,並以此作為主鍵
innodb被用在眾多需要高效能的大型資料庫站點上
myisam儲存引擎
myisam基於isam儲存引擎,並對其進行擴充套件。它是在web、資料倉儲和其他應用環境下最常使用的儲存引擎之一。myisam擁有較高的插入、查詢速度,但不支援事務。
myisam**可以被壓縮,而且它們支援全文搜尋。不支援事務,而且也不支援外來鍵。如果事物回滾將造成不完全回滾,不具有原子性。在進行updata時進行表鎖,併發量相對較小。如果執行大量的select,myisam是更好的選擇。
myisam的索引和資料是分開的,並且索引是有壓縮的,記憶體使用率就對應提高了不少。能載入更多索引,而innodb是索引和資料是緊密**的,沒有使用壓縮從而會造成innodb比myisam體積龐大。
myisam快取在記憶體的是索引,不是資料。而innodb快取在記憶體的是資料,相對來說,伺服器記憶體越大,innodb發揮的優勢越大。
myisam主要特性有:
大檔案(達到63位檔案長度)在支援大檔案的檔案系統和作業系統上被支援
當把刪除和更新及插入操作混合使用的時候,動態尺寸的行產生更少碎片。這要通過合併相鄰被刪除的塊,以及若下乙個塊被刪除,就擴充套件到下一塊自動完成
每個myisam表最大索引數是64,這可以通過重新編譯來改變。每個索引最大的列數是16
最大的鍵長度是1000位元組,這也可以通過編譯來改變,對於鍵長度超過250位元組的情況,乙個超過1024位元組的鍵將被用上
blob和text列可以被索引
null被允許在索引的列中,這個值佔每個鍵的0~1個位元組
所有數字鍵值以高位元組優先被儲存以允許乙個更高的索引壓縮
每個myisam型別的表都有乙個auto_increment的內部列,當insert和update操作的時候該列被更新,同時 auto_increment列將被重新整理。所以說,myisam型別表的auto_increment列更新比innodb型別的auto_increment更快
可以把資料檔案和索引檔案放在不同目錄
每個字元列可以有不同的字符集
有varchar的表可以固定或動態記錄長度
varchar和char列可以多達64kb
使用myisam引擎建立資料庫,將產生3個檔案。檔案的名字以表名字開始,副檔名之處檔案型別:frm檔案儲存表定義、資料檔案的擴充套件名為.myd(mydata)、索引檔案的副檔名時.myi(myindex)
memory儲存引擎
使用mysql memory儲存引擎的出發點是速度。為得到最快的響應時間,採用的邏輯儲存介質是系統記憶體。雖然在記憶體中儲存表資料確實會提供很高的效能,但當mysqld守護程序崩潰時,所有的memory資料都會丟失。獲得速度的同時也帶來了一些缺陷。它要求儲存在memory資料表裡的資料使用的是長度不變的格式,這意味著不能使用blob和text這樣的長度可變的資料型別,varchar是一種長度可變的型別,但因為它在mysql內部當做長度固定不變的char型別,所以可以使用。memory主要特性有:
memory表的每個表可以有多達32個索引,每個索引16列,以及500位元組的最大鍵長度
memory儲存引擎執行hash和btree縮影
可以在乙個memory表中有非唯一鍵值
memory表使用乙個固定的記錄長度格式
memory不支援blob或text列
memory支援auto_increment列和對可包含null值的列的索引
memory表在所由客戶端之間共享(就像其他任何非temporary表)
memory表記憶體被儲存在記憶體中,記憶體是memory表和伺服器在查詢處理時的空閒中,建立的內部表共享
當不再需要memory表的內容時,要釋放被memory表使用的記憶體,應該執行delete from或truncate table,或者刪除整個表(使用drop table)
merge儲存引擎
merge儲存引擎是一組myisam表的組合,這些myisam表結構必須完全相同,儘管其使用不如其它引擎突出,但是在某些情況下非常有用。說白了,merge表就是幾個相同myisam表的聚合器;merge表中並沒有資料,對merge型別的表可以進行查詢、更新、刪除操作,這些操作實際上是對內部的myisam表進行操作。
主要應用於伺服器日誌這種資訊,一般常用的儲存策略是將資料分成很多表,每個名稱與特定的時間端相關。例如:可以用12個相同的表來儲存伺服器日誌資料,每個錶用對應各個月份的名字來命名。當有必要基於所有12個日誌表的資料來生成報表,這意味著需要編寫並更新多表查詢,以反映這些表中的資訊。與其編寫這些可能出現錯誤的查詢,不如將這些表合併起來使用一條查詢,之後再刪除merge表,而不影響原來的資料,刪除merge表只是刪除merge表的定義,對內部的表沒有任何影響。
innodb:
如果要提供提交、回滾、崩潰恢復能力的事物安全(acid相容)能力,並要求實現併發控制,innodb是乙個好的選擇。
myisam:
如果資料表主要用來插入和查詢記錄,則myisam引擎能提供較高的處理效率。並且,如果你的應用程式對查詢效能要求較高,就要使用myisam了。myisam索引和資料是分開的,而且其索引是壓縮的,可以更好地利用記憶體。所以它的查詢效能明顯優於innodb。壓縮後的索引也能節約一些磁碟空間。myisam擁有全文索引的功能,這可以極大地優化like查詢的效率。r
archive:
如果只有insert和select操作,可以選擇archive,archive支援高併發的插入操作,但是本身不是事務安全的。archive非常適合儲存歸檔資料,如記錄日誌資訊可以使用archive。
對日誌的一些綜合操作,通常使用的是merge儲存引擎。
memory:
一般在以下幾種情況下使用memory儲存引擎:
1)目標資料較小,而且被非常頻繁地訪問。在記憶體中存放資料,所以會造成記憶體的使用,可以通過引數max_heap_table_size控制memory表的大小,設定此引數,就可以限制memory表的最大大小。
2)如果資料是臨時的,而且要求必須立即可用,那麼就可以存放在記憶體表中。
3)儲存在memory表中的資料如果突然丟失,不會對應用服務產生實質的負面影響。
4)如果只是臨時存放資料,資料量不大,並且不需要較高的資料安全性,可以選擇將資料儲存在記憶體中的memory引擎,mysql中使用該引擎作為臨時表,存放查詢的中間結果。
MySQL搜尋引擎程式 mysql搜尋引擎
mysql是我們比較常用的一種資料庫軟體。它有著諸多的優點,如開源的,免費的等等。其實它還有乙個很好的特點,那就是有多種引擎可以供你選擇。如果賽車手能根據不同的路況,地形隨手更換與之最適宜的引擎,那麼他們將創造奇蹟。然而目前他們還做不到那樣便捷的更換引擎,但是我們卻可以 所謂知己知彼方可百戰不殆,要...
MYSQL搜尋引擎
mysql數 據庫引擎取決於mysql在安裝的時候是如何被編譯的。要新增乙個新的引擎,就必須重新編譯mysql。在預設情況下,mysql支援三個引擎 isam myisam和heap。另外兩種型別innodb和berkley bdb 也常常可以使用。如果技術高超,還可以使用mysql api自己做乙...
搜尋引擎四 CoreSeek配置MySql資料來源
主機 localhost 埠 3306 資料庫 html url 表的結構 documents drop table ifexists documents create table ifnot exists documents id int 11 not null auto increment,su...