我有一个问题与这个查询相关:
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
嫌疑人表中有约 340,000 条记录,邮政编码上有一个索引,我有几个用户,但是这个单独的查询需要大约 0.5 秒。当我使用 explain 运行此 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
我有一个嫌疑人表格,每个嫌疑人都有一个地址(其中包含邮政编码),因此在此查询中,我试图获取邮政编码范围-起始和结束以及该范围内城市的名称。
希望这可以帮助您。