具有以下表格结构:
CREATE TABLE `PARSER_U_R_L` (
`PARSER_ID` varchar(20) COLLATE latin1_general_cs NOT NULL,
`URL_MD5` varchar(255) COLLATE latin1_general_cs NOT NULL,
`ENTRY_POINT_ID` varchar(20) COLLATE latin1_general_cs DEFAULT NULL,
`TYPE_ID` varchar(20) COLLATE latin1_general_cs DEFAULT NULL,
`STATUS_ID` varchar(20) COLLATE latin1_general_cs DEFAULT NULL,
`INDEXED_TIME` datetime DEFAULT NULL,
PRIMARY KEY (`PARSER_ID`,`URL_MD5`),
KEY `PURL_PARSER` (`PARSER_ID`))
ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs;
正如您在Parser_id和URL_MD5中看到的PRIMARY KEY。 当我尝试一个简单的选择
EXPLAIN
SELECT *
FROM `PARSER_U_R_L`
WHERE `URL_MD5` IN ( ids )
在这个选择的EXPLAIN中我有可能的键= Null。
可能有什么问题?
答案 0 :(得分:1)
问题是URL_MD5
不是主键中的第一个列。由于您的索引包含多个列,因此优化程序不会使用该索引,除非您为第一列提供值。
如果为提供第一列的值,优化器将使用它, 所以尝试反转索引中的列。