我有两个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的情况下它会更快地完成 –