mysql - 需要有关查询性能的帮助

标签 mysql query-performance

今天我遇到了一个奇怪的问题,我有以下查询。当我运行此查询时,需要很长时间。例如。如果我只在“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 Result with all condition

用日期条件解释结果 enter image description here

最佳答案

EXPLAIN语句结果的差异可以看出,使用所有条件的情况无法使用索引

您可以添加以下两个复合索引并进行测试:

    status 表中的
  1. (warenkorb__id, status)
  2. order 表上的
  3. (id, cdate)

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/

相关文章:

php - 如何通过 php 检测和修复 mysql 数据库中的字符编码?

mysql - 数据库设计 : how to design this peculiar relationship

mysql - 连接 ASCII 和 UTF-8 表会增加开销吗?

sql - Oracle 优化器尴尬地不喜欢使用索引

Mysql 或性能问题

mysql - 如何优化此 MySql 查询 - 连接 3 个表?

mysql - 恢复备份mysql

mysql - 为什么这个 sql 查询不断向我显示语法错误

c# - Azure 表存储 key 延迟变化很大

mysql - Spring Boot通过SSL远程连接Mysql