【发布时间】:2019-04-24 20:43:44
【问题描述】:
MYSQL 查询在本地服务器上运行良好,没有错误。但是在生产服务器上使用时,它崩溃了,我必须重新启动服务器
这是我的 order_table 表结构
item_id | order_id | status_id | date
-------------------------------------------
1 | 1 | 1 | 2014-01-20
2 | 1 | 2 | 2014-01-20
3 | 1 | 3 | 2014-01-20
4 | 2 | 1 | 2014-01-21
5 | 2 | 2 | 2014-01-21
6 | 3 | 1 | 2014-01-21
7 | 3 | 2 | 2014-01-21
8 | 3 | 3 | 2014-01-22
9 | 3 | 4 | 2014-01-22
10 | 3 | 5 | 2014-01-23
-------------------------------------------
我可以通过下面的查询获得order_id的最新状态
SELECT item_id, order_id, status_id
FROM order_table
WHERE item_id IN (
SELECT MAX(item_id)
FROM order_table
GROUP BY order_id
)
and status_id = '5'
order by order_id
上述查询在本地服务器上运行良好,但在生产服务器上崩溃。但是当删除 GROUP BY 时,查询也在生产服务器上成功执行。看起来 GROUP BY 正在产生问题
谁能帮我用另一种方法来用不同的方法获得相同的结果
【问题讨论】:
-
崩溃是什么意思?它会给出错误消息吗?
-
我记得昨天的这个问题,您不是使用两个不同的数据库供应商吗?像 MariaDB 和 MySQL?
-
子查询为什么需要排序&分组?
-
“我修复了数据库。现在我在本地和生产服务器上使用相同的数据库版本 MYSQL。” 很公平,你应该在这个问题中提到这一点.. 就像我在关于性能的问题之前发表评论一样,还应该为问题中涉及的每个表包括一个
EXPLAIN query输出和一个SHOW CREATE TABLE table.. 没有这个问题就不清楚了 -
尝试@Strawberry 的答案
IN(SELECT ...)语法在MySQL 中的优化很糟糕。他在答案中使用的JOIN 语法很可能会优化得更好。
标签: mysql