mysql - 查询优化

标签 mysql

我遇到了这个缓慢查询的问题:

SELECT c.*, csc1.changed_status
  FROM contract c
  LEFT
  JOIN contract_status_change csc1
    ON csc1.contract_status_change_id =
        ( SELECT csc2.contract_status_change_id
            FROM contract_status_change csc2
           WHERE csc2.contract_id = c.contract_id
           ORDER
              BY csc2.date_changed DESC
           LIMIT 1
        )
 ;

我有一个契约(Contract)表和一个contract_status_change表,用于记录契约(Contract)的状态。此查询正在加入合约的最新状态,以便您可以获得其当前状态..

你能帮我整理一下吗?

-编辑-

我很抱歉。我已更新查询以包括选择实际的最新状态。抱歉造成困惑!

最佳答案

格式化查询以提高可读性(一致的空格和大写,删除不必要的反引号和括号,更合理的别名):

SELECT c.*
  FROM contract c
  LEFT
  JOIN contract_status_change csc1
    ON csc1.contract_status_change_id =
        ( SELECT csc2.contract_status_change_id
            FROM contract_status_change csc2
           WHERE csc2.contract_id = c.contract_id
           ORDER
              BY csc2.date_changed DESC
           LIMIT 1
        )
 ;

并假设 contract_status_change.contract_status_change_id 是唯一标识符,我被迫得出结论,您的查询与此等效,而且效率更高:

SELECT c.*
  FROM contract c
 ;

您说它“正在加入合约的最新状态,以便您可以获得其当前状态”,但它不会对当前状态执行任何操作 - 不按顺序排序它不会被过滤,也不会将其包含在查询结果中 - 所以没有必要这样做。

关于mysql - 查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8389559/

相关文章:

mysql - 无法添加列

php - 无法在 Slim PHP 中发布参数

mysql获取记录深度,计算父和祖先记录

选择中的mysql变量

mysql - 数据库数据加密

php - MySQL中的及时更新不起作用

php - 不同类型的 mysql php 请求

php ->= 和 <= 不工作的 MYSQL 更新查询

php单例数据库连接,这段代码是不好的做法吗?

php - 在 codeigniter 中上传时压缩图像大小