这是我的 table 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)
为什么选择主键和普通字段一样快?
最佳答案
尝试select * from t1 where a='10000000';
。
您可能强制 MySQL 将所有这些字符串转换为整数 - 因为整数的类型优先级高于 varchar
- 在这种情况下,字符串上的索引是无用的
实际上,显然,我有点错了。通过我对 conversions 的阅读文档,我相信在 MySQL 中我们最终强制比较的双方都转换为 float
,因为我看不到上面的任何要点:
In all other cases, the arguments are compared as floating-point (real) numbers.
这将匹配一侧的字符串和另一侧的整数。
关于mysql - 为什么primary key对select没有很好的作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21134069/