欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql查詢總量速度,maisam與innodb存儲引擎區別與優缺點

江奕云2年前25瀏覽0評論
mysql查詢總量速度,maisam與innodb存儲引擎區別與優缺點?

MyISAM與InnoDB是Mysql常用的數據庫存儲引擎。兩種類型各有優勢。

具體差別是:MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。MyISAM類型表強調性能,其執行速度比InnoDB快,但是不提供事務支持,而InnoDB提供事務支持以及外部鍵等高級數據庫功能。

具體實現與細節差別

InnoDB不支持FULLTEXT類型的索引;

InnoDB中不保存表的具體行數,也就是說當執行select count(*) from table時,InnoDB會掃描一遍整張表來計算有多少行,但是MyISAM只需要簡單地讀出保存好的行數即可。需要注意的是count(*)語句中包含where條件時兩種表的操作是一致的。

對于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,而在MyISAM中可以和其他字段一起建立聯合索引。

DELETE FROM table時,InnoDB不會重新建立表,而是一行行刪除;

LOAD TABLE FROM MASTER操作對于InnoDB是不起作用的,解決方法是首先把InnoDB轉換成MyISAM表,導入數據后再轉成InnoDB表,但是對于額外的InnoDB特性(如外鍵)的表是不適用的。

InnoDB表的行鎖也不是絕對的,假如在執行一個SQL語句時MySQL不能確定要掃描的范圍,此時InnoDB依舊會鎖全表,例如update table set num=1 where name like '%aaa%'。

兩種類型最主要的差別是InnoDB支持事務處理與外鍵和行級鎖

其實從MySQL的用戶角度來講,二者如何選擇主要是看個人需求了,如果數據庫平臺達到需求:99.9%的穩定性,方便的擴展性和高可用性來說,MyISAM絕對是首選。 原因如下:

平臺上大多承載的是讀多寫少的項目,而MyISAM的讀性能比InnoDB要強不少;

MyISAM的索引和數據是分開的,并且索引是有壓縮的,這樣內存使用率就提高了不少。能加載更多索引,而InnoDB是索引和數據緊密捆綁的,沒有使用壓縮從而會造成InnoDB比MyISAM的體積龐大不少。

經常會出現開發人員不小心update一個表的where語句寫的范圍不對,導致整張表都不能正常使用,這是MyISAM的優越性就體現出來了,隨便從當天拷貝的壓縮包中取出對應表的文件,隨便放到一個數據庫目錄下,然后dump成SQL文件導回主庫,并把對應的binlog補上。如果是InnoDB就沒有這么快的速度了。通常情況下一個數據庫實例最小也有幾個G大小。

從接觸的應用邏輯來講,select count(*)和order by是最頻繁的,大概占到整個SQL語句的60%以上的操作,而這種操作InnoDB其實也是會鎖表的,很多人以為InnoDB是行級鎖,那個只是where對它主鍵有效,非主鍵的都是會鎖表的。

如果是定期導某些表的數據,用MyISAM的話會很方便,只需要發給他們對應表的frm、MYI、MYD文件,然后在對應版本的數據庫中啟動即可,而InnoDB則需要導出xxx.sql文件來執行。(說明:frm文件保存的是表的定義,MYD文件是表的內容,MYI是表的索引數據信息)

如果和MyISAM比Insert操作的話,InnoDB還達不到MyISAM的寫性能,如果是基于索引的update操作,雖然MyISAM會遜色與InnoDB,但是那么多高并發的寫,從庫能否追的上也是一個大問題。通常情況下會實現多實例分庫分表架構來解決。

使用事務的項目一般就用InnoDB。大項目總量約幾個億的rows的某一類型(如日志等)業務表會使用MyISAM。