【发布时间】:2017-07-20 08:13:30
【问题描述】:
我有一个庞大的项目需要进行统计。这个查询给了我准确的结果,但加载速度有点慢,需要以某种方式优化它,但不知道如何。
SELECT
TRIM(`op`.`products_quantity`) AS `products_quantity`,
TRIM(`op`.`products_price`) AS `products_price`,
TRIM(`op`.`orders_products_status`) AS `orders_products_status`,
TRIM(`p`.`product_type`) AS `product_type`,
IF(`p`.`product_type` IN ('G'),FLOOR(`op`.`final_price`*`op`.`products_quantity`),
`op`.`final_price`) AS `final_price`,
TRIM((
SELECT
`o`.`payment_method`
FROM
`orders` `o`
WHERE
`o`.`orders_id` = `op`.`orders_id`
GROUP BY `o`.`orders_id`
)) AS `payment_method`,
IF(
TRIM(DATE_FORMAT(STR_TO_DATE(`cd`.`concert_date`,'%d/%m/%Y'),'%d/%m/%Y')) LIKE (
SELECT
TRIM(DATE_FORMAT(`o`.`date_purchased`,'%d/%m/%Y'))
FROM
`orders` `o`
WHERE
`o`.`orders_id` = `op`.`orders_id`
GROUP BY `o`.`orders_id`
),
1,0
) AS `same_day`
FROM
`categories` `c`,
`categories_description` `cd`,
`products` `p`,
`orders_products` `op`
WHERE
`c`.`section_id` = 25
AND
`cd`.`categories_id` = `c`.`categories_id`
AND
`p`.`section_id` = `c`.`section_id`
AND
`p`.`product_type` IN ('P')
AND
`op`.`products_id` = `p`.`products_id`
GROUP BY `op`.`orders_products_id`
ORDER BY `payment_method` ASC
有人有什么建议吗?
我还想从 SQL 专家那里得到一些很好的解释,如何组织类似查询的最佳方式以及在 WHERE 部分中首先需要的是什么。
【问题讨论】:
-
为什么这个问题被标记为
php? -
EXPLAIN 是你的朋友
-
如果您将尝试获取的记录中的
table structures和brief description添加为查询的输出,您将获得更多有用的答案。