mysql二级索引查询差异很大,innodb vs myisam

标签 mysql innodb myisam

1.表格说明

innodb_test

CREATE TABLE `innodb_test` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `city` varchar(255) DEFAULT NULL,
  `status` mediumint(9) DEFAULT NULL,
  `date` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name_city_satus` (`name`,`city`,`status`)
) ENGINE=InnoDB AUTO_INCREMENT=1;
myisam_test** is just the same as innodb_test but with MyISAM engine.

2.我运行以下 SQL 得到 57 行:

1):

SELECT SQL_NO_CACHE * FROM innodb_test WHERE `name` LIKE 'H%' AND city LIKE 'O%' LIMIT 0, 10000;

2):

 SELECT SQL_NO_CACHE * FROM myisam_test WHERE `name` LIKE 'H%' AND city LIKE 'O%' LIMIT 0, 10000;

根据show profilings,第一个sql花费了0.029s,而另一个sql花费了0.0069s。

为什么他们的差别这么大?

最佳答案

尝试将固定行格式添加到您的表格中。

固定行格式的速度比动态格式提高了 44%。

固定行格式的缺点是存储列所需的空间。更改为固定行格式将用空格填充任何可变长度列。但是,只要您以牺牲磁盘空间为代价来换取性能,性能就会获胜。

ALTER TABLE  `innodb_test` ROW_FORMAT = FIXED

more info here

关于mysql二级索引查询差异很大,innodb vs myisam,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22726524/

相关文章:

mysql - Magento 让 MySQL 每天崩溃 1 到 2 次

mysql - 没有 InnoDB 的 Magento

php - 如何解析数组 PHP->JSON->XCODE 中的数组

mysql - Yii 在其他模型中调用 beforeSave() 来保存

php - laravel5 中 where 条件内的两个子选择查询?

mysql - 最佳 MySQL 配置 (my.cnf)

mysql - 将表引擎从 innoDB 更改为 MyISAM

mysql - 更改 "option file"my.ini 的 MySQL 路径

mysql - 表中的指针大小是多少?

mysql - MyISAM 锁定大型 select 语句