这是我的桌子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 |
Run Code Online (Sandbox Code Playgroud)
结果:
mysql> select * from t1 where a=10000000;
Empty set (1.42 sec)
mysql> select * from t1 where b=10000000;
Empty set (1.41 sec)
Run Code Online (Sandbox Code Playgroud)
为什么选择主键和普通字段一样快?
试试select * from t1 where a='10000000';.
您可能强制MySQL将所有这些字符串转换为整数 - 因为整数的类型优先级高于varchar- 在这种情况下,字符串上的索引是无用的
实际上,显然,我有点不对劲.通过阅读转换文档,我相信在MySQL中我们最终会强制将比较的两边都转换为float,因为我看不到上面的任何要点:
在所有其他情况下,参数被比较为浮点(实数).
这将匹配一侧的字符串和另一侧的整数.