我正在尝试加快以下查询的选择速度,在该查询中,WHERE IN
中有1000多个项目
表格:
CREATE TABLE `user_item` (
`user_id` int(11) unsigned NOT NULL,
`item_id` int(11) unsigned NOT NULL,
PRIMARY KEY (`user_id`,`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
查询:
SELECT
item_id
FROM
user_item
WHERE
user_id = 2
AND item_id IN(3433456,67584634,587345,...)
IN
列表中有1000个项目,执行查询大约需要3秒钟。在这种情况下是否可以进行任何优化?该表中可能有数十亿行。是否可以通过其他数据库或编程方法来更快地完成此操作?
user_id
的所有值?由于此字段是PRIMARY KEY
中的第一个(主要)字段,因此仍将使用相关索引。您是否尝试过用子查询替换常量列表?例如,也许您对特定类型的商品感兴趣。
请确保您使用Prepared statement
概念-至少在数据库和语言支持的情况下。这样可以保护您的代码免遭可能的SQL注入,并启用数据库内置查询缓存(如果数据库支持)。