我有这个 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解决方案?
运行showplan,然后在catalog_id上添加索引。运行 showplan 看看是否更好。如果没有,请尝试...
在catalog_id上建立索引并释放。运行展示计划。如果没有,请尝试...
如果许多行空闲= 0,则在catalog_id上放置索引并且空闲> 0。运行showplan。 (这基本上就是您想要的缓存。)如果没有,请尝试...
IN 通常会导致多个索引查找或回退到表扫描。你有一个有 5000 个 ID 的 IN 吗?是的,您要么执行 5000 次查询,要么进行表扫描。有时加入速度更快。在 IN 中创建目录 ID 表,然后在查询中联接到该表。请注意,您将需要解决方案 1 中的索引。运行 showplan。