我有一個查詢,拉形式很多表,但它很慢,我想改善它。什麼是我的查詢獲得快速結果的好索引?
SELECT
ph.phone_call_id AS id,
ph.call_subject AS callSubject,
ac.account_name AS accountName,
ph.trigger_on AS triggerOn,
ph.isAppointment,
ph.status,
ind.name AS industry,
cc.call_code_name AS callCode,
ac.account_id FROM phone_calls AS ph
INNER JOIN accounts AS ac ON ph.account_id = ac.account_id
INNER JOIN industries AS ind ON ind.industry_id = ac.industry_id
INNER JOIN call_codes AS cc ON ph.call_code_id = cc.call_code_id
WHERE
ac.status = 1 AND
ph.status = 1 AND
ph.owner_id = 1 AND
ac.do_not_call = 0 AND
ph.trigger_on BETWEEN '2012-10-09 00:00:00' AND '2013-04-09 23:59:59'
LIMIT 0,25
請注意,phone_Calls表有大約450萬條記錄和大約300k條記錄的帳戶。
我有這樣的指數目前
ph.trigger_on
ph.owner_id
ph.status
ac.status
ac.do_not_call
ac.account_id
這裏是我所得到的,當我解釋查詢
感謝您的信息。狀態是0,1,2然而我幾乎總是在我的where子句中使用它。是的,我有很多索引,這就是爲什麼我要求幫助,因爲我不認爲我正在做索引部分。所以對於上面的查詢什麼是一個好的索引?如果我添加ph.account_id,ph.call_code_id和ph.owner_id這3個索引就在那裏,所以我不知道什麼是管理這些索引的最佳方法 – Mike 2013-04-09 22:59:08
我對你的數據集不熟悉,所以我不能確定。選擇非常獨特的列幾乎總是一個很好的選擇。這聽起來像你必須以編程方式應用每個新的索引,然後運行你的解釋說明。這將揭示哪些將最有幫助。每個人都應該至少幫助一下,但是你想選擇那些最相關的人。在你的連接語法中引用的那些似乎是最好的選擇。 – usumoio 2013-04-09 23:06:07
我如何可編程地應用每個索引? – Mike 2013-04-09 23:13:01