Mysql索引无法正常工作

时间:2015-08-28 13:38:15

标签: mysql

具有以下表格结构:

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。

可能有什么问题?

1 个答案:

答案 0 :(得分:1)

问题是URL_MD5不是主键中的第一个列。由于您的索引包含多个列,因此优化程序不会使用该索引,除非您为第一列提供值。

如果为提供第一列的值,优化器将使用它, 所以尝试反转索引中的列。