我对 MySQL 中的索引感到非常困惑。
我有两个表:TableA1 和 TableA2。
我为它们之间的连接创建了索引,查询运行得非常快。
我还有另外 2 个具有相同设置的表,例如表 B1 和表 B2。唯一的区别是这些表有一些空值。
出于某种原因,对 TableA 执行相同的查询大约快 5 倍,并且不需要全表扫描。然而,TableB 似乎使用了全表扫描,我不知道为什么。可能是 Null 值导致的吗?
我注意到在 TableA 设置中使用 EXPLAIN,我得到了 possible keys: myindex
和 ref: func
;然而,在 TableB 设置中,我只得到 possible keys: NULL
和 ref: 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/