首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么主键对选择没有很好的影响?

为什么主键对选择没有很好的影响?
EN

Stack Overflow用户
提问于 2014-01-15 09:51:53
回答 2查看 183关注 0票数 1

这是我的表t1;它有一百万行。

代码语言:javascript
复制
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 |

结果:

代码语言:javascript
复制
mysql> select * from t1 where a=10000000;
Empty set (1.42 sec)

mysql> select * from t1 where b=10000000;
Empty set (1.41 sec)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-15 10:04:35

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

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

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

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

它将在一边匹配一个字符串,另一边匹配一个整数。

票数 5
EN

Stack Overflow用户

发布于 2014-01-15 10:04:14

数据存储在几乎所有数据库中的块中。读取块是IO的基本单位。索引帮助系统对数据库进行归零,该数据库保存了我们试图读取的数据,并将避免读取所有数据库锁。在具有单个或极少数数据块的非常小的表中,索引的使用实际上可能是一种开销,可能会被完全跳过。即使使用,索引也很少提供任何性能好处。在一个相当大的桌子上做同样的实验。

PS:索引和键(主键)是不可互换的概念。前者是物理的,后者是合乎逻辑的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21134069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档