mysql - 在 MySQL 中使用索引连接的两组相同的表;一个需要全表扫描

标签 mysql indexing full-table-scan

我对 MySQL 中的索引感到非常困惑。

我有两个表:TableA1 和 TableA2。

我为它们之间的连接创建了索引,查询运行得非常快。

我还有另外 2 个具有相同设置的表,例如表 B1 和表 B2。唯一的区别是这些表有一些空值。

出于某种原因,对 TableA 执行相同的查询大约快 5 倍,并且不需要全表扫描。然而,TableB 似乎使用了全表扫描,我不知道为什么。可能是 Null 值导致的吗?

我注意到在 TableA 设置中使用 EXPLAIN,我得到了 possible keys: myindexref: func;然而,在 TableB 设置中,我只得到 possible keys: NULLref: NULL

我在这方面搜索了很长时间,似乎找不到相关的答案。如果有人能指出我正确的方向,我将不胜感激。

(抱歉,现在添加到原始问题中。)

这是 TableAOne:

CREATE TABLE `TableAOne` (
  `field1` varchar(255) DEFAULT NULL,
  `field2` varchar(255) DEFAULT NULL,
  KEY `myindex` (`field1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

和 TableATwo:

CREATE TABLE `TableATwo` (
  `Field3` varchar(255) ,
  `Field4` varchar(255) ,
  `Field5` varchar(255) ,
  `id` int(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15522 DEFAULT CHARSET=utf8;

我将加入 Field3 和 Field1。

得到全表扫描的表和上面的表是一样的。唯一的区别是它们被称为 TableB 而不是 TableA。

干杯,

最佳答案

我刚刚删除了表并将其重新安装到数据库(我确实将 utf8 更改为 latin1 不确定这是否有所不同),但它现在可以工作了,真的很奇怪!非常感谢 v 的所有回复,他们确实插入了我对答案的欢呼:)

关于mysql - 在 MySQL 中使用索引连接的两组相同的表;一个需要全表扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2262458/

相关文章:

mysql - 如何在 MySQL 中临时将 CURRENT_TIMESTAMP 更改为另一个时间

sql-server - SQL 中多维度的类型 2 有效日期索引性能

sql - 如何避免使用 LIKE 运算符进行全表扫描

sql - 为什么左连接会导致优化器忽略索引?

mysql - 为什么 MySQL 在运行查询时不使用我的索引?

php - 其余 API 更新

mysql - 在数据库 : caching database records into domain logic V/S using MySQL full-text search? 中搜索文本

将数据帧多列中出现的数字替换为 R 中的另一个值

MySQL 索引,单列还是多列?

java - ScrollPane 添加到网格布局