我对MySQL中的索引感到非常困惑。
我有两张桌子:表1和表2。
我为它们之间的连接创建了索引,查询运行得非常快。
我还有两张设置相同的表,如表B1和表B2。唯一的区别是这些表有一些空值。
出于某种原因,对table a的同一个查询大约要快5倍,而且不需要进行完整的表扫描。但是table似乎使用了全表扫描,我不明白为什么。可能是空值造成的吗?
我注意到使用EXPLAIN,在TableA设置中,我得到possible keys: myindex
和ref: func
;但是在tableab设置中,我得到的只是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;
还有两张桌子:
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/