优化大型MySQL SELECT WHERE IN语句

时间:2014-07-12 14:31:17

标签: php mysql sql pdo

我需要在MySQL上执行一个大的SELECT WHERE IN查询,我需要它快速运行。我有一个超过1亿行的表,其中主键位于varchar 127上(它必须是那样)。

我正在执行SELECT col1 FROM表WHERE col1 IN($ in),其中$ in有5000个值。我基本上只需要找到主键col1中表中5,000个值中的哪一个。

查询通常需要1到10秒,但通常大约需要7到8秒。

是否有更优化,快速的方法在varchar索引的大型表上使用大型IN子句执行SELECTS?

我在使用PHP和PDO的专用服务器上使用InnoDB。感谢您的建议。

1 个答案:

答案 0 :(得分:1)

评论时间有点长。

我猜你已经有table(col1)的索引,否则查询可能需要超过10秒。如果不是这样,则添加一列。更好的是,将列作为主键。

我怀疑索引不适合内存。为此,您需要找到一个MySQL DBA(如果您有这么大的表,您应该拥有它)或了解MySQL的内存选项。不符合记忆的索引会表现出这种行为。

如果这是真的,那么行为应该是非常线性的。所以,如果你有一个500个ID的列表,它应该需要大约一秒或更少。如果你有50个ids,那么十分之一秒左右。

在这种情况下,对id列表进行排序可能会有所帮助。但是,这只是我的猜测。