【发布时间】:2014-02-03 17:22:40
【问题描述】:
这是我的桌子 t1;它有一百万行。
CREATE TABLE `t1` (
`a` varchar(10) NOT NULL,
`b` varchar(10) DEFAULT NULL,
`c` varchar(10) DEFAULT NULL,
`d` varchar(10) DEFAULT NULL,
`e` varchar(10) DEFAULT NULL,
`f` varchar(10) DEFAULT NULL,
`g` varchar(10) DEFAULT NULL,
`h` varchar(10) DEFAULT NULL,
PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
结果:
mysql> select * from t1 where a=10000000;
Empty set (1.42 sec)
mysql> select * from t1 where b=10000000;
Empty set (1.41 sec)
为什么选择主键和普通字段一样快?
【问题讨论】:
-
在 a 上定义索引并重试。
-
主键也是一个索引,我给a加了另一个索引,但是也没任何作用。
-
@Alexander,MySQL 中的主键是索引:stackoverflow.com/a/707896/1788704
-
试试
select * from t1 where a='10000000';。您可能会强制 MySQL 将所有这些字符串转换为整数 - 在这种情况下,字符串上的索引是无用的。 -
@DennisTraub - 它确实表明了我对 MySQL 的偏见。我知道任何明智的 SQL 数据库系统都会执行这样的转换,但我开始不期望 MySQL 做明智的事情:-|