0

我有一个包含很多子查询的查询。执行时间约为 8 秒,非常慢。我使用 CSS SQL Azure 诊断来建议一些索引,但它没有多大帮助 我该如何优化这个查询?

SELECT  'employee' as emplres_type, e.employee_id as emplres_id,
(isnull(e.name_last,'')+' '+e.name_first+' '+isnull(e.name_second,'')) as employee_title,
(SELECT SUM(ci.quantity) FROM items_employees ie LEFT JOIN check_items ci ON ci.item_id=ie.citem_id LEFT JOIN checks c ON ci.check_id=c.check_id WHERE ie.employee_id=e.employee_id AND ci.servprod_type='service' AND CAST(floor(CAST(c.payed as float)) as datetime)=:date) as services_n,
(SELECT SUM(ci.quantity) FROM items_employees ie LEFT JOIN check_items ci ON ci.item_id=ie.citem_id LEFT JOIN products p ON p.product_id=ci.servprod_id LEFT JOIN checks c ON ci.check_id=c.check_id WHERE ie.employee_id=e.employee_id AND ci.servprod_type='product' AND CAST(floor(CAST(c.payed as float)) as datetime)=:date AND consumable=0) as products_n,
(SELECT SUM(ci.quantity) FROM items_employees ie LEFT JOIN check_items ci ON ci.item_id=ie.citem_id LEFT JOIN products p ON p.product_id=ci.servprod_id LEFT JOIN checks c ON ci.check_id=c.check_id WHERE ie.employee_id=e.employee_id AND ci.servprod_type='product' AND CAST(floor(CAST(c.payed as float)) as datetime)=:date AND consumable=1) as consumables_n,
(SELECT SUM(isnull(ci.total,0)) FROM items_employees ie LEFT JOIN check_items ci ON ci.item_id=ie.citem_id LEFT JOIN checks c ON ci.check_id=c.check_id WHERE ie.employee_id=e.employee_id AND ci.servprod_type='service' AND CAST(floor(CAST(c.payed as float)) as datetime)=:date) as services,
(SELECT SUM(isnull(ci.total,0)) FROM items_employees ie LEFT JOIN check_items ci ON ci.item_id=ie.citem_id LEFT JOIN products p ON p.product_id=ci.servprod_id LEFT JOIN checks c ON ci.check_id=c.check_id WHERE ie.employee_id=e.employee_id AND ci.servprod_type='product' AND CAST(floor(CAST(c.payed as float)) as datetime)=:date AND consumable=0) as products,
(SELECT SUM(isnull(ci.total,0)) FROM items_employees ie LEFT JOIN check_items ci ON ci.item_id=ie.citem_id LEFT JOIN products p ON p.product_id=ci.servprod_id LEFT JOIN checks c ON ci.check_id=c.check_id WHERE ie.employee_id=e.employee_id AND ci.servprod_type='product' AND CAST(floor(CAST(c.payed as float)) as datetime)=:date AND consumable=1) as consumables,
(SELECT SUM(isnull(comm_spec_payed*percentage/100,0)) FROM items_employees ie LEFT JOIN check_items ci ON ci.item_id=ie.citem_id LEFT JOIN checks c ON ci.check_id=c.check_id WHERE ie.employee_id=e.employee_id AND ci.servprod_type='service' AND CAST(floor(CAST(c.payed as float)) as datetime)=:date) as comm_services,
(SELECT SUM(isnull(comm_spec_payed*percentage/100,0)) FROM items_employees ie LEFT JOIN check_items ci ON ci.item_id=ie.citem_id LEFT JOIN checks c ON ci.check_id=c.check_id WHERE ie.employee_id=e.employee_id AND ci.servprod_type='product' AND CAST(floor(CAST(c.payed as float)) as datetime)=:date) as comm_products,
(SELECT SUM(isnull(ie.to_balance,0)) FROM items_employees ie LEFT JOIN check_items ci ON ci.item_id=ie.citem_id LEFT JOIN checks c ON ci.check_id=c.check_id WHERE ie.employee_id=e.employee_id AND CAST(floor(CAST(c.payed as float)) as datetime)=:date) as comm_to_balance,
(SELECT SUM(a.commission_payed) FROM check_admins a LEFT JOIN checks c ON a.check_id=c.check_id WHERE a.employee_id=e.employee_id AND CAST(floor(CAST(c.payed as float)) as datetime)=:date) as comm_admin
FROM
(SELECT DISTINCT employee_id  FROM schedule
WHERE work_type='work' AND CAST(floor(CAST([from] as float)) as datetime)=:date AND salon_id=:salon_id ) s
LEFT JOIN employees e ON s.employee_id=e.employee_id
4

0 回答 0