程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql中InnoDB和MyISAM兩種表類型的區別

Mysql中InnoDB和MyISAM兩種表類型的區別

編輯:MySQL綜合教程

 眾所周知,InnoDB和MyISAM是mysql中最常用的兩種表的類型,MyISAM是默認的類型。它們的區別很多,主要是側重點不同,InnoDB支持一些高級處理,而MyISAM強調性能,當然強調性能的同時就要犧牲一些東西了。

現在對比一下統計行數的語句(select count(*)|(1)|(Primary Key)),在Mysql中新建兩個表,分別是MyISAM和InnoDB類型的:

代碼 CREATE TABLE  `Table1` (
  `id` int(11) NOT NULL,
  `name` char(50) character set ucs2 default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

CREATE TABLE  `Table2` (
  `id` int(11) NOT NULL,
  `name` char(50) character set ucs2 default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

然後隨機的往這兩張表中插入一些記錄,比如都插入2條。

然後執行一下語句:

select count(*) from Table1
select count(*) from Table2

注意:這裡的count(*)和count(id)及count(1)其實沒有什麼區別了,因為我們新建這張表時已經建好了主鍵,mysql和大多數的數據庫引擎一樣會做一些優化,它會去根據主鍵索引來統計。

以上的語句結果當然都是2。下面分析這兩句話的執行過程:

explain select count(*) from Table1
explain select count(*) from Table2

得到的執行計劃分別如下:

第一句:

+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                        |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
|  1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Select tables optimized away |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+

第二句:

+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table  | type  | possible_keys | key     | key_len | ref  | rows | Extra       |
+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
|  1 | SIMPLE      | Table2 | index | NULL          | PRIMARY | 4       | NULL |    3 | Using index |
+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+

由此,我們能很明顯的看出Table1是MyISAM類型的表,統計行數時它已經是最優的語句了( Select tables optimized away ,表示已經不能再優化了,一些資料上說MyISAM類型的表將Rows存在一個地方,查詢時直接使用即可。)。Table2是InnoDB類型的表,統計行數時它將使用聚集索引進行統計。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved