[英]Two sets of indentical tables with joins using indexes in MySQL; one requires full-table scan
我對MySQL中的索引感到非常困惑。
我有兩個表:TableA1和TableA2。
我為它們之間的連接創建了索引,查詢運行得非常快。
我還有另外兩個具有相同設置的表,例如TableB1和TableB2。 唯一的區別是這些表具有一些空值。
由於某種原因,在TableA上執行相同的查詢大約要快5倍,並且不需要全表掃描。 但是,TableB似乎使用了全表掃描,我不知道為什么。 可能是Null值導致了這一點嗎?
我注意到使用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;
我正在將Field3與Field1一起加入。
獲得全表掃描的表與上述表相同。 唯一的區別是它們被稱為TableB而不是TableA。
干杯,
柯
我只是刪除了表,然后將其重新安裝到數據庫(我確實將utf8更改為latin1,不確定這是否有所不同),但是現在可以正常工作了,真的很奇怪! 非常感謝所有答復,他們肯定使我朝着答案歡呼:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.