为什么"其中id在(n1,n2,n3,...,n2000)"难以置信的慢?

时间:2016-10-19 02:56:10

标签: mysql where-clause

我有一张大约有一亿行的表格,而且这个列有一个' id'是主键,它是表中唯一的键。

我的查询如下:

SELECT id,name FROM table WHERE id IN (id1, id2, id3, id4, ..., id1000);

这些1000个内部" IN"实际上是由程序预先计算的const整数。

但Mysql每次花费大约一分钟来进行查询。它并不慢,但速度非常慢。该条款有什么问题?非常感谢你!

表格定义:

CREATE TABLE mytable
(
    id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
    catid smallint(5) unsigned NOT NULL DEFAULT '0',
    name char(39) NOT NULL,
    originalname varchar(255) NOT NULL,
    thumb varchar(255) NOT NULL DEFAULT '',
    description varchar(255) NOT NULL DEFAULT '',
    status tinyint(2) unsigned NOT NULL DEFAULT '1',
    creationtime int(11) unsigned NOT NULL DEFAULT '0',
    updatetime int(11) unsigned NOT NULL DEFAULT '0',
    score int(11) unsigned NOT NULL
    PRIMARY KEY (id)
)
ENGINE=MyISAM
AUTO_INCREMENT=13074618
DEFAULT CHARSET=utf8

1 个答案:

答案 0 :(得分:1)

IN'列表'达到一定的大小,MySQL将换成TABLE/INDEX SCAN,这有可能非常慢。

您可以重写查询以使用TEMPORARY TABLE或JOIN(SELECT UNION)来查看是否有助于提高性能。

考虑运行EXPLAIN EXTENDED以查看减慢速度的因素。