2

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

我有两个表:TableA1 和 TableA2。

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

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

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

我注意到在 TableA 设置中使用 EXPLAIN 时,我possible keys: myindex也得到了ref: func; 但是在 TableB 设置中,我得到的只是possible keys: NULLref: NULL.

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

(对不起,现在添加到原始问题中。)

这是表AOne:

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;

我将与 Field1 一起加入 Field3。

获得全表扫描的表与上述表相同。唯一的区别是它们被称为 TableB 而不是 TableA。

干杯,

4

1 回答 1

0

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

于 2010-02-15T03:00:11.230 回答