我有這個疑問:我應該把索引放在什麼上的MySql?
SELECT Concat(f.name, ' ', f.parent_names) AS FullName,
stts.name AS 'Status',
u.name AS Unit,
city.name AS City,
(SELECT Group_concat(c.mobile1)
FROM contacts c
WHERE c.id = f.husband_id
OR c.id = f.wife_id) AS MobilePhones,
f.phone AS HomePhone,
f.contact_initiation_date AS InitDate,
f.status_change_date AS StatusChangeDate,
cmt.created_at AS CommentDate,
cmt.comment AS LastComment,
f.reconnection_date AS ReconnectionDate,
(SELECT Group_concat(t.name, ' ')
FROM taggings tgs
JOIN tags t
ON tgs.tag_id = t.id
WHERE tgs.taggable_type = 'family'
AND tgs.taggable_id = f.id) AS HandlingStatus
FROM families f
JOIN categories stts
ON f.family_status_cat_id = stts.id
JOIN units u
ON f.unit_id = u.id
JOIN categories city
ON f.main_city_cat_id = city.id
LEFT JOIN comments cmt
ON f.last_comment_id = cmt.id
WHERE 1 = 0
OR (u.is_busy = 1)
OR (f.family_status_cat_id = 1423)
OR (f.family_status_cat_id = 1422
AND f.status_change_date BETWEEN '2011-03-21' AND '2012-03-13')
我的問題是非常具體的。它是關於該行:
SELECT GROUP_CONCAT(c.mobile1)
FROM contacts c
WHERE c.id = f.husband_id
OR c.id = f.wife_id
) AS MobilePhones
當我使用EXPLAIN時,似乎這個查詢是不好的。我得到這張表(c = contacts):38307行。 根據查詢,應該在哪些列上放置索引? 我嘗試了mobile1 - 但沒有改進(BTW - family_id在聯繫人表中編入索引)。
我附上解釋結果的圖像:
或者,也許有人可以幫我優化查詢...
該ID的表現。如果他們是鑰匙,他們已經被索引。您的圖片太小,無法閱讀。 – mawburn 2013-03-11 15:13:10
@coderseven我不會說它太小而不能閱讀,但它在眼睛上很痛 – 2013-03-11 15:14:15
@LloydBanks http://i.stack.imgur.com/8bSXn.png它實際上更大。 – mawburn 2013-03-11 15:15:03