mysql - 这个查询看起来优化了吗?

标签 mysql sql optimization

我正在为需要列出所有产品及其购买次数的应用程序编写查询。

我想出了这个并且它有效,但我不太确定它的优化程度。由于大量使用 ORM,我的 SQL 确实生锈了,但在这种情况下,查询是一种更优雅的解决方案。

您能发现查询中的任何错误(方法明智)吗?


SELECT  products.id, 
        products.long_name AS name, 
        count(oi.order_id) AS sold
FROM    products
LEFT OUTER JOIN 
      ( SELECT * FROM orderitems
        INNER JOIN orders ON orderitems.order_id = orders.id 
        AND orders.paid = 1 ) AS oi 
      ON oi.product_id = products.id
GROUP BY products.id

架构(带有相关字段)如下所示:

*orders*      id, paid
*orderitems*  order_id, product_id
*products*    id

更新

这是针对 MySQL 的

最佳答案

我不确定“(SELECT *” ... 业务。

这执行(总是一个好的开始),我认为与发布的内容相同。

SELECT  products.id, 
    products.long_name AS name, 
    count(oi.order_id) AS sold
FROM    products
LEFT OUTER JOIN
    orderitems AS oi
        INNER JOIN 
            orders 
            ON oi.order_id = orders.id AND orders.paid = 1
    ON oi.product_id = products.id
GROUP BY products.id

关于mysql - 这个查询看起来优化了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/161524/

相关文章:

mysql - 提供正确的 sequelize.js 对象连接到数据库( Multi-Tenancy 应用程序)

mysql - 在不同和相同日期的范围之间选择时间

mysql - 查询所有记录时,Spring Boot 无法找到 MySQL 表

sql - 在两列上使用 COUNT 和 GROUP BY 进行非常慢的 SQL 查询

java - JDBC 回滚方法的行为与预期不同

sql - 如何使用多个 JOIN 过滤多个值

php - 读入一个文本文件,按异常字符分割,逐行处理 "line"

algorithm - 加油站问题 - 最便宜和最少的加油站

MySQL 查询优化器显示对具有主索引和复合索引的表进行查询的随机行为

javascript - 使用 JavaScript 优化递归字符串操作函数