我有兩個MySQL表格說A和B.一個包含只有一個varchar列(讓我們打電話給一個A1)與約23000記錄。表B(70000條記錄)有更多的列,其中一個與表A中的A1相對應(讓我們稱之爲B1)。我想知道A的值不會在B中的相應列,所以我用:爲什麼這個查詢運行得這麼慢?
SELECT A1
FROM A
LEFT JOIN B
ON A1 = B1
WHERE B1 IS NULL
這兩列A1和B1都對他們的定義的索引。仍然這個查詢運行速度非常慢。我已經運行解釋,這是輸出:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE A index \N PRIMARY 767 \N 23269 Using index
1 SIMPLE B ALL \N \N \N \N 70041 Using where; Not exists
更新:SHOW CREATE TABLE
兩個表(改變了原來的名稱);
CREATE TABLE `A` (
`A1` varchar(255) NOT NULL,
PRIMARY KEY (`A1`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
CREATE TABLE `B` (
`col1` int(10) unsigned NOT NULL auto_increment,
`col2` datetime NOT NULL,
`col3` datetime default NULL,
`col4` datetime NOT NULL,
`col5` varchar(30) NOT NULL,
`col6` int(10) default NULL,
`col7` int(11) default NULL,
`col8` varchar(20) NOT NULL,
`B1` varchar(255) default NULL,
`col10` tinyint(1) NOT NULL,
`col11` varchar(255) default NULL,
PRIMARY KEY (`col1`),
KEY `NewIndex1` (`B1`)
) ENGINE=MyISAM AUTO_INCREMENT=70764 DEFAULT CHARSET=latin1
「諾特爾編輯:data_length
和index_length
從SHOW TABLE STATUS
table data_length index_length
A 465380 435200
B 5177996 1344512
你在做表上的索引嗎? – ThoKra
他在A1和B1上有索引 –
有趣的是,如果我'取消'這個,那麼做一個右連接,只有在A1是NULL的情況下它會更快地完成 –