簡體   English   中英

兩組帶有在MySQL中使用索引進行連接的相同表; 一個需要全表掃描

[英]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: myindexref: func ; 但是在TableB設置上,我只得到possible keys: NULLref: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM