我需要在 MySQL 上执行大型 SELECT WHERE IN 查询,并且需要它快速运行。我有一个超过 1 亿行的表,主键在 varchar 127 上(而且必须是这样)。
我正在执行 SELECT col1 FROM table WHERE col1 IN ($in) 其中 $in 有 5000 个值。我基本上只需要在主键 col1 的表中找到 5,000 个值中的哪些值。
查询通常需要 1 到 10 秒,但通常约为 7 或 8 秒。
是否有更优化、更快速的方法来对由 varchar 索引的巨大表执行带有大型 IN 子句的 SELECTS?
我在带有 PHP 和 PDO 的专用服务器上使用 InnoDB。感谢您的建议。
最佳答案
评论有点长。
我猜您在 table(col1)
上已经有了索引,否则查询可能需要 10 秒以上的时间。如果不是这样,则添加一列。更好的是,将该列设为主键。
我怀疑索引不适合内存。为此,您将需要找一个 MySQL DBA(如果您有这么大的表,您应该有)或了解 MySQL 的内存选项。不适合内存的索引会表现出这种类型的行为。
如果这是真的,那么行为应该是非常线性的。所以,如果你有一个包含 500 个 ID 的列表,它应该需要大约一秒或更短的时间。如果您有 50 个 ID,则需要十分之一秒左右。
在这种情况下,对 ID 列表进行排序可能会有所帮助。然而,这实际上只是我的猜测。
关于php - 优化大型 MySQL SELECT WHERE IN 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24713924/