mysql5.5之後的預設儲存引擎
如果你為乙個表指定auto_increment列,在資料詞典裡的innodb表控制代碼包含乙個名為自動增長計數器的計數器,它被用在為該列賦新值。
自動增長計數器僅被儲存在主記憶體中,而不是存在磁碟上
關於該計算器的演算法實現,請參考
auto_increment列在innodb裡如何工作
innodb 中不儲存表的具體行數,也就是說,執行select count(*) from table時,innodb要掃瞄一遍整個表來計算有多少行
最好是where查詢跟的主鍵以外的索引列,因為innodb主鍵是聚集索引,輔助索引是非聚集。如果查聚集索引的話,需要連同資料一起返回,很慢。
即myisam同乙個表上的讀鎖和寫鎖是互斥的,myisam併發讀寫時如果等待佇列中既有讀請求又有寫請求,預設寫請求的優先順序高,即使讀請求先到,所以myisam不適合於有大量查詢和修改並存的情況,那樣查詢程序會長時間阻塞。因為myisam是鎖表,所以某項讀操作比較耗時會使其他寫程序餓死
每表乙個auto_incremen列的內部處理。
myisam為insert和update操作自動更新這一列。這使得auto_increment
列更快(至少10%)。在序列頂的值被刪除之後就不能再利用。(當auto_increment列被定義為多列索引的最後一列,可以出現重使用從序列頂部刪除的值的情況)。
auto_increment值可用alter table或myisamch來重置
對於auto_increment型別的字段,innodb中必須包含只有該字段的索引,但是在myisam表中,可以和其他字段一起建立聯合索引
更好和更快的auto_increment處理
select count(*) from table,myisam
只要簡單的讀出儲存好的行數,注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的,最好走索引
全文索引是指對char、varchar和text中的每個詞(停用詞除外)建立倒排序索引。myisam的全文索引其實沒啥用,因為它不支援中文分詞,必須由使用者分詞後加入空格再寫到資料表裡,而且少於4個漢字的詞會和停用詞一樣被忽略掉。
行級鎖定的優點:
行級鎖定的缺點:
在以下情況下,表鎖定優先於頁級或行級鎖定:
update tbl_name set
column = value
where unique_key_col = key_value ;
delete
from tbl_name where unique_key_col = key_value ;
MySQL儲存引擎 InnoDB
為什麼innodb不將總數存起來?innodb直接count 會遍歷全表 沒有where條件 雖然結果準確,但會導致效能問題。按照效率排序的話,count 字段 innodb一棵b 樹可以存放多少行資料?這個問題的簡單回答是 約2千萬。為什麼是這麼多呢?因為這是可以算出來的,要搞清楚這個問題,我們先...
MySQL的儲存引擎INNODB
1 一般情況下,mysql會預設提供多種儲存引擎,你可以通過下面的檢視 看你的mysql現在已提供什麼儲存引擎 mysql show engines 看你的mysql當前預設的儲存引擎 mysql show variables like storage engine 你要看某個錶用了什麼引擎 在顯示...
mysql的innodb儲存引擎
innodb是支援事務的儲存引擎,支援acid特性的acid 指資料庫事務正確執行的四個基本要素的縮寫 包含 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 更適合處理大量的小事務,小事務正常都會被提交,很少會被回滾,在資料儲存的...