mysql - 为什么primary key对select没有很好的作用?

标签 mysql sql select

这是我的 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/

相关文章:

mysql - 获取包含确切文本的行

PHP & MySQL 图形公式

php - codeigniter 中的 group by 和 count 计数不正确

php - MySQL推荐,字段vs关系表

mysql - 如何使用 mysql 在分层数据模式中制作此 SELECT?

php - fatal error : Call to a member function bind_param() PHP MySQL Prepared Statements

php - 从一个表中动态获取行并从其他表中获取值,将其求和并插入到目标表中

php - 这可以作为单个更新查询运行吗?

html - 包裹在选择框中 - Firefox 的问题

dataframe - 使用 findall() 函数在多个条件下搜索数据框中的索引