【发布时间】:2014-11-10 14:41:50
【问题描述】:
我遇到了一个查询,该查询在工作时难以理解(进行更改),并且在我看来是未优化的。
SELECT cp.`order` AS `order`, cp.parent_id, cp.id AS category_id, cp.stub, cp.name as category_name, dc.deals_in_cat, d.*
FROM category_parent cp,
(
SELECT id, title, subtitle, image, image_m, discount, itemid, price, new_price, catalog_id, property_id, seller_id, category FROM deals
WHERE deals.category = 1
AND itemid NOT IN (156785431)
ORDER BY e_order LIMIT 8
) d,
(
SELECT a.`id` AS parent_id, COUNT( DISTINCT c.`itemid` ) AS deals_in_cat
FROM `category_parent` AS a
LEFT JOIN `navigation_filters_weightage` AS d ON a.`id` = d.`cat_id`,
`deals_parent_cat` AS b,
`deals` AS c
WHERE a.`parent_id` = b.`id`
AND c.`category` = a.`id` GROUP BY a.id ORDER BY b.`order` ASC , a.`order` ASC
) AS dc
WHERE cp.id = d.category
AND cp.active = '1'
AND dc.parent_id = cp.id;
能否请您提出一些使其更简单的方法。
谢谢
【问题讨论】:
-
你怎么知道它没有优化?运行时间是否太长?不使用索引?没有表结构和查询计划,没有测试数据和预期的结果集,很难提供帮助
-
我知道在没有架构的情况下可能很难提出改进建议,但由于某些限制无法发布。加载需要更长的时间。如果有帮助,表格将被规范化。
-
查询看起来一点也不差。它的性能将取决于表上存在的索引。第一步是查看查询计划。如果您不能发布,那么我们就到此为止了;您必须自己了解查询计划的含义。
标签: mysql sql query-optimization