MySQL的MyISAM和InnoDB的區別

2021-08-07 20:36:34 字數 970 閱讀 7526

mysql預設採用的是myisam。

myisam不支援事務,而innodb支援。innodb的autocommit預設是開啟的,即每條sql語句會預設被封裝成乙個事務,自動提交,這樣會影響速度,所以最好是把多條sql語句顯示放在begin和commit之間,組成乙個事務去提交。

innodb支援資料行鎖定,myisam不支援行鎖定,只支援鎖定整個表。即 myisam同乙個表上的讀鎖和寫鎖是互斥的,myisam併發讀寫時如果等待佇列中既有讀請求又有寫請求,預設寫請求的優先順序高,即使讀請求先到,所以 myisam不適合於有大量查詢和修改並存的情況,那樣查詢程序會長時間阻塞。因為myisam是鎖表,所以某項讀操作比較耗時會使其他寫程序餓死。

innodb支援外來鍵,myisam不支援。

innodb的主鍵範圍更大,最大是myisam的2倍。

innodb不支援全文索引,而myisam支援。全文索引是指對char、 varchar和text中的每個詞(停用詞除外)建立倒排序索引。myisam的全文索引其實沒啥用,因為它不支援中文分詞,必須由使用者分詞後加入空 格再寫到資料表裡,而且少於4個漢字的詞會和停用詞一樣被忽略掉。

myisam支援gis資料,innodb不支援。即myisam支援以下空間資料物件:point,line,polygon,su***ce等。

沒有where的count(*)使用myisam要比innodb快得多。因 為myisam內建了乙個計數器,count(*)時它直接從計數器中讀,而innodb必須掃瞄全表。所以在innodb上執行count(*)時一般 要伴隨where,且where中要包含主鍵以外的索引列。為什麼這裡特別強調「主鍵以外」?因為innodb中primary index是和raw data存放在一起的,而secondary index則是單獨存放,然後有個指標指向primary key。所以只是count(*)的話使用secondary index掃瞄更快,而primary key則主要在掃瞄索引同時要返回raw data時的作用較大。

記錄一下原文:

MYSQL的MYISAM和INNODB的區別

併發帶來的問題,更新丟失舉個栗子 比如5000塊錢,2個人同時操作,你存500我存1000,那麼結果是6000,那500的更新丟失了,少了500塊,所以才需要排他鎖,同一時間,只能乙個人獨佔資料,其他人要改必須要等我改完 當sql server準備更新資料時,它首先對資料物件作更新鎖鎖定,這樣資料將...

mysql 的Myisam和InnoDB的索引結構

先建立兩個表 1.myisam myisam的資料檔案是三個,乙個是原資料和結構,乙個是索引,乙個是資料,大家在建立好之後可以看在資料檔案裡面看下 左側是主鍵的索引結構,b tree,葉子節點 最下層 儲存的是資料位址,通過查詢條件查詢的時候,查詢的是資料位址,通過資料位址拿到資料,右側是普通索引,...

mysql中innodb和MyISAM的儲存

一 零鋪墊 在介紹b樹之前,先來看另一棵神奇的樹 二叉排序樹 binary sort tree 首先它是一棵樹,二叉 這個描述已經很明顯了,就是樹上的一根樹枝開兩個叉,於是遞迴下來就是二叉樹了 下圖所示 而這棵樹上的節點是已經排好序的,具體的排序規則如下 從圖中可以看出,二叉排序樹組織資料時,用於查...