php - 优化大型 MySQL SELECT WHERE IN 语句

标签 php mysql sql pdo

我需要在 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/

相关文章:

php - Usaepay 付款被拒绝,ssl 版本错误

php - 如果 DELETE 查询有效,检查 mysql_query 结果?

php - zend框架: include external module in bootstrapper or create plugin

mysql - INSERT INTO 语法错误 SQL

mysql - 优化 MySql 查询(IN)以避免使用 “Using filesort”

mysql - 比较表中的 2 行

php - while()中的数据如何划分?

PHP 最佳实践?

php - 使用 EZPDF 通过 PHP 从 Mysql 导出时如何使表响应

mysql - 性能,为什么JOIN比IN更快