Query is not using Index

Query is not using Index

am 19.01.2011 07:44:00 von Yogesh Kore

--20cf30433ee89b1083049a2d577c
Content-Type: text/plain; charset=ISO-8859-1

Hi,

I am firing following query

SELECT
'Sales' as transaction_type,
CONCAT('$', SUM(CASE DATE(px_orders.sales_orders.order_completed_date)
WHEN CURDATE() THEN px_orders.sales_order_products.paid_amount ELSE 0
END)) AS today,
CONCAT('$', SUM(CASE WEEK(px_orders.sales_orders.order_completed_date,1)
WHEN WEEK( CURRENT_TIMESTAMP(),1) THEN
px_orders.sales_order_products.paid_amount ELSE 0 END)) AS this_week,
CONCAT('$', SUM(if (DATEDIFF(
DATE(px_orders.sales_orders.order_completed_date), DATE_SUB(CURDATE() ,
INTERVAL 7 DAY) ) < '7' &&
DATEDIFF(DATE(px_orders.sales_orders.order_completed_date),
DATE_SUB(CURDATE() , INTERVAL 7 DAY) ) >= '0'
,px_orders.sales_order_products.paid_amount,0)))
as week_1,
CONCAT('$', SUM(if (DATEDIFF(
DATE(px_orders.sales_orders.order_completed_date), DATE_SUB(CURDATE() ,
INTERVAL 14 DAY) ) < '7' &&
DATEDIFF(DATE(px_orders.sales_orders.order_completed_date),
DATE_SUB(CURDATE() , INTERVAL 14 DAY) ) >= '0'
,px_orders.sales_order_products.paid_amount,0)))
as week_2,
CONCAT('$', SUM(if (DATEDIFF(
DATE(px_orders.sales_orders.order_completed_date), DATE_SUB(CURDATE() ,
INTERVAL 21 DAY) ) < '7' &&
DATEDIFF(DATE(px_orders.sales_orders.order_completed_date),
DATE_SUB(CURDATE() , INTERVAL 21 DAY) ) >= '0'
,px_orders.sales_order_products.paid_amount,0)))
as week_3,
CONCAT('$', SUM(if (DATEDIFF(
DATE(px_orders.sales_orders.order_completed_date), DATE_SUB(CURDATE() ,
INTERVAL 28 DAY) ) < '7' &&
DATEDIFF(DATE(px_orders.sales_orders.order_completed_date),
DATE_SUB(CURDATE() , INTERVAL 28 DAY) ) >= '0'
,px_orders.sales_order_products.paid_amount,0)))
as week_4,
CONCAT('$', SUM(if (px_orders.sales_orders.order_completed_date >=
DATE_SUB(CURDATE( ),INTERVAL DAYOFMONTH(CURDATE( ))-1
DAY),px_orders.sales_order_products.paid_amount,0)))
as mtd,
CONCAT('$', SUM(if (px_orders.sales_orders.order_completed_date >=
DATE_SUB(CURDATE( ),INTERVAL DAYOFYEAR(CURDATE( ))-1
DAY),px_orders.sales_order_products.paid_amount,0)))
as ytd
FROM
px_orders.sales_order_products LEFT JOIN px_orders.sales_orders
ON px_orders.sales_order_products.order_id = px_orders.sales_orders.id
WHERE
px_orders.sales_order_products.status IN ( 'COMPLETED', 'CANCELED' )
AND px_orders.sales_orders.affiliate_organisation_id = 265;

By explaining this query I am finding that query is not using index in table
`px_orders.sales_order_products`. It is

Explain Output:-

id select_type table type
possible_keys key key_len ref rows
Extra 1 SIMPLE sales_order_products
ALL fk_op_order_id


159809 Using where 1 SIMPLE sales_orders eq_ref PRIMARY PRIMARY
8 px_orders.sales_order_products.order_id 1 Using where
Explain is showing that table `sales_order_products` have possible key
fk_op_order_id but not using the key and examining all the rows from a
table.
order_id from sales_order_products is foreign key to id of sales_orders.

Anyone can tell why this is happening.? Is there a way to optimize this
query?

Thank You.

--20cf30433ee89b1083049a2d577c--