是否有可能加快WHERE IN或将其替换为更快的替代方法?

问题描述 投票:0回答:1

我正在尝试加快以下查询的选择速度,在该查询中,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秒钟。在这种情况下是否可以进行任何优化?该表中可能有数十亿行。是否可以通过其他数据库或编程方法来更快地完成此操作?

mysql mariadb innodb rdbms
1个回答
0
投票

    您是否尝试过只获取user_id的所有值?由于此字段是PRIMARY KEY中的第一个(主要)字段,因此仍将使用相关索引。
  1. 您是否尝试过用子查询替换常量列表?例如,也许您对特定类型的商品感兴趣。

  2. 请确保您使用Prepared statement概念-至少在数据库和语言支持的情况下。这样可以保护您的代码免遭可能的SQL注入,并启用数据库内置查询缓存(如果数据库支持)。

© www.soinside.com 2019 - 2024. All rights reserved.