今天碰到一个慢sql问题.记录一下.
有两张表ta和tb,简化后的表结构如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # ta 有14605条数据 CREATE TABLE `ta` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
# tb 有2790条数据 CREATE TABLE `tb` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
慢sql如下:
1 2 3 4 5 6 7 8
| select count(*) from ta left join tb on ta.name = tb.name;
+ | count(*) | + | 14605 | + 1 row in set (2.96 sec)
|
刚开始以为是没有建索引.检查了一下索引是没有问题的.于是就纳闷了.后来看了很久才发现原来是ta表中的name的类型弄错了.ta表中的name的类型是int,而t2表中name的类型是varchar.类型不一样就用不上索引.把ta表中的类型修改回varchar后就马上正常了.
1 2 3 4 5 6 7 8
| select count(*) from ta left join tb on ta.name = tb.name;
+ | count(*) | + | 14605 | + 1 row in set (0.02 sec)
|