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