mysql中的Explain命令是否误导?

时间:2016-04-18 18:50:37

标签: mysql mysql-workbench

我有一个表Employee,截至目前它有21列和611,028行。

当我运行以下查询时,

select count(*) from employee where employee.joined_at > '2016-02-15';
  

输出:81632

当我按照explain查询运行时,

explain select count(*) from employee where employee.joined_at > '2016-02-15';

输出如下,

id | select_type | table    | type  | possible_keys   | key             | key_len | ref  | rows   | Extra
-------------------------------------------------------------------------------------------------------------------
1  | SIMPLE      | employee | range | index_joined_at | index_joined_at | 9       | null | 158216 | Using where

你可以看到没有。与实际count相比,行扫描非常高。这怎么可能?我可以信任explain命令来优化我的查询吗?如果是,那么何时?

我正在使用mysql版本5.5.47-0ubuntu0.14.04.1。我找到了类似的文章here。但它没有解释我这种行为的原因。那么,我何时可以信任explain mysql命令?

我的表创建命令(我为安全目的重命名了列名)

CREATE TABLE `Employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `column 2` date DEFAULT NULL,
  `column 3` int(11) DEFAULT NULL,
  `column 4` int(11) NOT NULL DEFAULT '0',
  `column 5` int(11) NOT NULL DEFAULT '0',
  `column 6` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `column 7` int(11) DEFAULT NULL,
  `column 8` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `column 9` text COLLATE utf8_unicode_ci NOT NULL,
  `user_id` int(11) DEFAULT NULL,
  `joined_at` datetime DEFAULT NULL,
  `column 12` datetime DEFAULT NULL,
  `column 13` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `phone_no` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `column 15` text COLLATE utf8_unicode_ci,
  `status` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'Cold',
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `column 18` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `column 19` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `column 20` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `column 21` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`),
  KEY `index_user_id` (`user_id`),
  KEY `index_joined_at` (`joined_at`),
  KEY `index_phone_no` (`phone_no`),
  KEY `index_status` (`status`),
  KEY `index_email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=627960 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

0 个答案:

没有答案