【发布时间】:2014-07-12 23:00:56
【问题描述】:
我需要在 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。感谢您的建议。
【问题讨论】:
-
您是否尝试将
$IN变量中的值放入临时表中,并以主键作为值?加入此表可能有助于提高性能。另外,返回多少行?如果结果集非常大,则可能会花费时间来检索数据而不是生成结果集。 -
这些值是任意的吗?换句话说,可以在 WHERE AND 值的开头添加
-
Gordon,我没有尝试过,需要为我详细说明的步骤,因为我对大型 mysql 表比较陌生。在 5,000 个中,通常返回 1,000 到 5,000 个之间的任何值,这是一个相当大的返回集。
-
Mihai,是的,这些值是任意的,并且分散在整个表格中。