使用索引优化mysql查询

Jos*_*eph 5 mysql indexing optimization b-tree

我有这个查询的问题:

SELECT DISTINCT s.city, pc.start, pc.end 
FROM postal_codes pc LEFT JOIN suspects s ON (s.postalcode BETWEEN pc.start AND      pc.end) 
WHERE pc.user_id = "username" 
ORDER BY pc.start
Run Code Online (Sandbox Code Playgroud)

疑似表有大约340 000个条目,邮政编码上有一个索引,我有几个用户,但这个单独的查询需要大约0.5秒,当我用解释运行这个SQL时,我得到这样的东西:http://my.jetscreenshot .com/7536/20111225-myhj-41kb.jpg - 这些NULL是否意味着查询没有使用索引?索引是一个BTREE所以我认为这应该运行得快一点.

你能帮我解决这个问题吗?如果还有其他任何信息,请告诉我.

编辑:我有关于suspects.postalcode,postal_codes.start,postal_codes.end,postal_codes.user_id的索引.

基本上我正在努力实现的目标:我有一个表,其中每个用户ID分配了多个邮政编码范围,因此它看起来像:

user_id | start | end
Run Code Online (Sandbox Code Playgroud)

我有一个嫌疑人表,每个嫌疑人都有一个地址(包含邮政编码),所以在这个查询中我试图获得邮政编码范围 - 开始和结束以及该范围内的城市名称.

希望这可以帮助.

gol*_*mar 0

它仅使用一个索引,而不是连接中涉及的字段。尝试为开始和结束字段创建索引,或使用 >= 和 <= 而不是 BETWEEN