如何查找表是MyISAM还是InnoDB?

46

明白了。展示创建表users的语句。也许有人有更好的解决方案。 - Nick Vanderbilt
3个回答

65

你可以使用SHOW TABLE STATUS命令查看表格信息。

SHOW TABLE STATUS WHERE `Name` = 'my_table';

只需检查返回数据集中Engine列的值即可知道表正在使用哪个引擎。


27
SELECT ENGINE
FROM INFORMATION_SCHEMA.TABLES 

WHERE TABLE_NAME='your_table_name'
AND   TABLE_SCHEMA='your_database_name';
-- or use TABLE_SCHEMA=DATABASE() if you have a default one.

12

你可以使用SHOW CREATE TABLE命令,并查找响应中的ENGINE部分。

SHOW CREATE TABLE users;

例子:

CREATE TABLE innodb_table (id int, value int) ENGINE=INNODB;
CREATE TABLE myisam_table (id int, value int) ENGINE=MYISAM;
CREATE TABLE default_table (id int, value int);

innodb_table 的结果:

SHOW CREATE TABLE innodb_table;
+--------------+----------------------------------------------------------------------------------------------------------------------------------+
| Table        | Create Table                                                                                                                     |
+--------------+----------------------------------------------------------------------------------------------------------------------------------+
| innodb_table | CREATE TABLE `innodb_table` (
  `id` int(11) DEFAULT NULL,
  `value` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+--------------+----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

myisam_table的结果:

SHOW CREATE TABLE myisam_table;
+--------------+----------------------------------------------------------------------------------------------------------------------------------+
| Table        | Create Table                                                                                                                     |
+--------------+----------------------------------------------------------------------------------------------------------------------------------+
| myisam_table | CREATE TABLE `myisam_table` (
  `id` int(11) DEFAULT NULL,
  `value` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+--------------+----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

default_table 的结果:

SHOW CREATE TABLE default_table;
+---------------+-----------------------------------------------------------------------------------------------------------------------------------+
| Table         | Create Table                                                                                                                      |
+---------------+-----------------------------------------------------------------------------------------------------------------------------------+
| default_table | CREATE TABLE `default_table` (
  `id` int(11) DEFAULT NULL,
  `value` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+---------------+-----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

3
@Andrew:需要花费多少钱?……从技术角度来看,你的答案可能更好,但“SHOW CREATE TABLE”的响应不仅更易于阅读(在我看来),而且打字更短。 - Daniel Vassallo
4
这可能是最常见且易于记忆的检查存储引擎的方法,尽管有点“嘈杂”。 - wuputah
4
@Andrew - 谁会在意对存储引擎进行一次检查的成本呢? - Hammerite
1
@Hammerite:我认为Andrew是在说这不是正确的答案。事实上确实如此。 - Ringo
@AndrewMoore “昂贵”可能是相对的,并且可能取决于其他因素。在我的数据库上,“show table status”花费了4.75秒,“show create table”花费了0.85秒。(“select engine from information_schema.tables”花费了0.0秒) - msb
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接