这是我的表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)为什么选择主键和普通字段一样快?
发布于 2014-01-15 10:04:35
试试select * from t1 where a='10000000';。
您可能强迫MySQL将所有这些字符串转换为整数--因为整数的类型优先级高于varchar --在这种情况下,字符串上的索引是无用的。
事实上,很显然,我有点错了。通过阅读转换文档,我相信在MySQL中,我们最终会强制将比较的两边转换为float,因为我看不到上面的任何要点:
在所有其他情况下,参数被比较为浮点数(实数).
它将在一边匹配一个字符串,另一边匹配一个整数。
发布于 2014-01-15 10:04:14
数据存储在几乎所有数据库中的块中。读取块是IO的基本单位。索引帮助系统对数据库进行归零,该数据库保存了我们试图读取的数据,并将避免读取所有数据库锁。在具有单个或极少数数据块的非常小的表中,索引的使用实际上可能是一种开销,可能会被完全跳过。即使使用,索引也很少提供任何性能好处。在一个相当大的桌子上做同样的实验。
PS:索引和键(主键)是不可互换的概念。前者是物理的,后者是合乎逻辑的。
https://stackoverflow.com/questions/21134069
复制相似问题