加快海量数据的SQL查询速度

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

我有这个 SQL 查询

SELECT * 
FROM `storages_remains` 
WHERE `FREE` > 0 
  AND `CATALOG_ID` IN (...)

CATALOG_ID
不是唯一的,因为表可能包含多个存储数据。

CATALOG_ID + STORAGE_ID
是独一无二的,但我无法在该查询中指定某些存储,它应该适用于所有人。

FREE
是存储剩余量的整数值。

我可以做什么来优化这个 SQL 查询?

我有一个想法来缓存地图之类的东西

product_id => storage_id => is_avail:bool

有没有SQL解决方案?

sql query-optimization innodb mysql-5.7
1个回答
0
投票
  1. 运行showplan,然后在catalog_id上添加索引。运行 showplan 看看是否更好。如果没有,请尝试...

  2. 在catalog_id上建立索引并释放。运行展示计划。如果没有,请尝试...

  3. 如果许多行空闲= 0,则在catalog_id上放置索引并且空闲> 0。运行showplan。 (这基本上就是您想要的缓存。)如果没有,请尝试...

  4. IN 通常会导致多个索引查找或回退到表扫描。你有一个有 5000 个 ID 的 IN 吗?是的,您要么执行 5000 次查询,要么进行表扫描。有时加入速度更快。在 IN 中创建目录 ID 表,然后在查询中联接到该表。请注意,您将需要解决方案 1 中的索引。运行 showplan。

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