今天我遇到了一个奇怪的问题,我有以下查询。当我运行此查询时,需要很长时间。例如。如果我只在“2018-01-01 00:00:00”和“2018-10-31 23:59:59”之间放置“where w2.cdate”或仅“s2.status='NEW'”,那么它给出立竿见影的结果,但如果我把这两个条件放在一起,那就需要时间。我的“cdate”和“status”列都已建立索引。这背后的原因是什么,我怎样才能找到它。
select w2.id from status s2
inner join order w2 on s2.warenkorb__id=w2.id
where w2.cdate between '2018-01-01 00:00:00' and '2018-10-31 23:59:59' and s2.status='NEW'
最佳答案
从EXPLAIN
语句结果的差异可以看出,使用所有条件的情况无法使用索引
。
您可以添加以下两个复合索引并进行测试:
(warenkorb__id, status)
。(id, cdate)
。
status
表中的 order
表上的 ALTER TABLE
查询如下:
ALTER TABLE status ADD INDEX(warenkorb__id, status);
ALTER TABLE order ADD INDEX(id, cdate);
关于mysql - 需要有关查询性能的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53443955/