MySql内部选择性能差

MySql内部选择性能差,mysql,performance,select,Mysql,Performance,Select,我在MySql数据库中有两个表: t_大非常大的表,带有项目id的主键,时间 t_item小表~20K行,主键为item_id。此表在列组_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;

我在MySql数据库中有两个表: t_大非常大的表,带有项目id的主键,时间

t_item小表~20K行,主键为item_id。此表在列组_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万行

使用内部联接没有帮助

但是,当我用它的结果替换内部select时,它解决了“解释”只显示t_big上扫描的几行的问题。当我这样做时,查询如下所示:

explain select * from t_big where item_id in (9001,9002,9003) and TIME >= 1417380000 and TIME < 1417380600;
必须有一种方法可以让我在不进行完全扫描的情况下更优雅地运行此查询,而不是在运行查询并注入其结果之前运行内部选择


有人知道更好的/不同的方法吗?

可能会看到所有三种变体的解释计划……可能您需要在t\U项中的group\u id字段上建立索引?你能粘贴explain的输出吗?你有关于t_项、时间的索引吗?如果不是,则创建一个索引,即包含两个字段而不是两个索引的and索引。