为什么主键对select没有好的效果?

LTz*_*cLT 1 mysql sql select

这是我的桌子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)

为什么选择主键和普通字段一样快?

Dam*_*ver 5

试试select * from t1 where a='10000000';.

您可能强制MySQL将所有这些字符串转换为整数 - 因为整数的类型优先级高于varchar- 在这种情况下,字符串上的索引是无用的


实际上,显然,我有点不对劲.通过阅读转换文档,我相信在MySQL中我们最终会强制将比较的两边都转换为float,因为我看不到上面的任何要点:

在所有其他情况下,参数被比较为浮点(实数).

这将匹配一侧的字符串和另一侧的整数.

  • 最后我从mysql.com找到了一些有用的信息"为了比较字符串列和数字,MySQL不能使用列上的索引来快速查找值." "这样做的原因是有许多不同的字符串可以转换为值1,例如'1','1'或'1a'." (2认同)