【发布时间】:2014-12-19 17:49:04
【问题描述】:
我正在对 user_profile 表进行搜索,其中包含单个索引以及复合索引:
SELECT •••
FROM user_profile up
JOIN auth_user au
ON au.id = up.user_id
LEFT
JOIN _basecountry bc
ON bc.id = up.country_id =
LEFT
JOIN _relationshipstatus rs
ON rs.id = up.relationship_status_id
LEFT
JOIN _workstatus ws
ON ws.id = up.work_status_id
LEFT
JOIN _fieldofwork fw
ON fw.id = up.field_of_work_id
LEFT
JOIN _fieldofstudy fs
ON fs.id = up.field_of_study_id
LEFT
JOIN _educationlevel el
ON el.id = up.education_level_id
LEFT
JOIN _religion r
ON r.id = up.religion_id
WHERE up.lazy = 0
AND up.has_avatar = 1
AND up.inactive = 1
AND up.id <> 3247028
AND up.city = 'London'
AND up.challenge_count < 10
AND up.age BETWEEN 18 AND 28
AND up.gender = 'F'
AND up.id > 1468899
LIMIT 25
解释结果是:
POSSIBLE_KEYS PRIMARY,user_id,compound_match,age,gender,challenge_count,lazy,city,has_avatar,inactive
KEY city,lazy,has_avatar
KEY_LEN 578,1,1 无
行 1224
EXTRA 使用 intersect(city,lazy,has_avatar);在哪里使用
复合索引“compound_match”组合使用的列:id、user_id、age、gender、challenge_count、lazy、has_avatar、inactive
为什么 mysql 更喜欢 intersect 呢?结果查询很慢。
【问题讨论】:
-
为清晰起见重新格式化查询。请注意,没有 ORDER BY 的 LIMIT 在很大程度上是没有意义的。而且您的解释似乎不完整
标签: mysql