优化运行时间更长的mysql查询

时间:2019-11-29 11:19:21

标签: mysql

我在下面有一个查询,该查询在控制台中运行.046秒,但是通过api调用它运行了1分钟,然后出现内部服务器错误。不知道是什么问题。我需要优化查询吗?请提出解决方案。我正在使用MySQL 5.5

Select distinctrow cus_id,set_id 
from orders 
where ord_dttm between DATE_FORMAT(NOW()- interval 12 month, '%y-%m-01') 
and now() 
and ord_status <>"Cancelled";

我也尝试索引但没有运气。索引仅在我的日期范围为2个月时有效

2 个答案:

答案 0 :(得分:1)

尝试这样,

Select distinctrow cus_id,set_id 
from orders 
where ord_dttm >= DATE_FORMAT(NOW()- interval 12 month, '%Y-%m-01')
and ord_status <> "Cancelled";

,如果您在PHP中创建了此API,并在PHP var中计算了日期,则可以使用直接date,例如:

$date = date("Y-m-d", strtotime("-12 months"));

$sql = "Select distinctrow cus_id,set_id 
from orders 
where ord_dttm >= '". $date ."' AND ord_status <> 'Cancelled';"

这还将提高您的查询获取速度。

答案 1 :(得分:0)

使用大写字母Y,否则将是很旧的日期:

mysql> select DATE_FORMAT(NOW()- interval 12 month, '%y-%m-01');
+---------------------------------------------------+
| DATE_FORMAT(NOW()- interval 12 month, '%y-%m-01') |
+---------------------------------------------------+
| 18-12-01                                          |
+---------------------------------------------------+

mysql> select DATE_FORMAT(NOW()- interval 12 month, '%Y-%m-01');
+---------------------------------------------------+
| DATE_FORMAT(NOW()- interval 12 month, '%Y-%m-01') |
+---------------------------------------------------+
| 2018-12-01                                        |
+---------------------------------------------------+

如果这还不够,请提供SHOW CREAT TABLE和表格的大小。