尋找在MySQL中優化以下查詢的方法。我曾嘗試在sales_date,serviceID和initalStatus上創建多列索引,但未使用。我試圖研究,但是對於優化來說很新,似乎找不到合適的答案。下面是查詢:使用多列索引進行優化MYSQL
SELECT
COUNT(id) as TotalAccounts,
AVG(sale_value) AS SaleValue,
AVG(credit_card = 1) * 100 AS CreditCard,
SUM(CASE WHEN pre_status = 1 AND bill_status = 'current' THEN 1
ELSE 0
END) AS Active,
SUM(CASE WHEN pre_status = 1 AND bill_status = 'past' THEN 1
ELSE 0
END) AS PastDue,
SUM(CASE WHEN `status` = 0 AND bill_status = 'past' THEN 1
ELSE 0
END) AS Canceled
FROM table_x
WHERE sales_date >= CAST('2015-01-01' AS DATE)
AND sales_date <= CAST('2016-01-01' AS DATE)
AND serviceID = 1
AND initialStatus = 1
並解釋輸出:
id: '1',
select_type: 'SIMPLE',
table: 'table_x',
type: 'ALL',
possible_keys: 'sales_date,Combo sales_date office_id,salesDate_serviceID_initalStatus',
key: NULL,
key_len: NULL,
ref: NULL,
rows: '177585',
Extra: 'Using where'
爲背景,共記錄:204830。記錄在我的日期範圍內:65,491。
您是否可以包含用於創建多列索引的代碼? –
可能的錯誤:'sales_date <= CAST('2016-01-01'AS DATE)'包括結束日期。改爲只需'sales_date <'2016-01-01''。還要注意的是鑄造沒有必要。 –
65,491在日期範圍內,但在結果集中有多少? –