我在MySql DB中有2个表: t_big(非常大的表),PK为(item_id,time)。
t_item(小表~20K行),PK为item_id。该表还有列group_id的索引。
当我对查询运行解释时(应该返回5行):
explain select * from t_big where item_id in (select item_id from t_item where group_id = 5885) and TIME >= 1417380000 and TIME < 1417380600;
我得到了一个糟糕的结果(在t_big上扫描了大约200万行)。
使用内部联接没有帮助。
但是,当我用其结果替换内部选择时,它解决了问题(解释只显示了在t_big上扫描的几行)。当我这样做时,查询看起来像这样:
explain select * from t_big where item_id in (9001,9002,9003) and TIME >= 1417380000 and TIME < 1417380600;
我必须有一种方法可以在没有完全扫描的情况下更优雅地运行此查询(而不是在运行查询并注入结果之前运行内部选择)。
有没有人知道更好/不同的方式?