我对MySQL中的索引感到非常困惑。
我有两个表: TableA1和TableA2。
我为它们之间的连接创建了索引,查询运行得非常快。
我还有另外两个具有相同设置的表,例如TableB1和TableB2。唯一的区别是这些表有几个空值。
由于某些原因,在TableA上执行相同的查询大约快5倍,并且不需要全表扫描。然而,TableB似乎使用了全表扫描,我不知道为什么。会不会是空值导致了这种情况?
我注意到在使用EXPLAIN时,在TableA设置中,我得到了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;我将和Field1一起加入Field3。
获得全表扫描的表与上面的表相同。唯一的区别是它们被称为TableB而不是TableA。
干杯,
柯氏
发布于 2010-02-15 11:00:11
我只是删除了表,并将其重新安装到数据库中(我确实将utf8更改为latin1,但不确定这是否有区别),但是现在它可以工作了,真的很奇怪!非常感谢所有的回复,他们确实推动了我的回答干杯:)
https://stackoverflow.com/questions/2262458
复制相似问题