У меня проблема с этим запросом:
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 с, когдаЯ запускаю этот SQL с объяснением, я получаю что-то вроде этого: http://my.jetscreenshot.com/7536/20111225-myhj-41kb.jpg - означают ли эти NULL, что запрос не использует индекс?Индекс является BTREE, поэтому я думаю, что он должен работать немного быстрее.
Не могли бы вы помочь мне с этим?Если требуется какая-либо другая информация, просто дайте мне знать.
Редактировать: у меня есть индексы для sustims.postalcode, postal_codes.start, postal_codes.end, postal_codes.user_id.
В основном, что яЯ пытаюсь достичь: у меня есть таблица, где каждому идентификатору пользователя назначено несколько диапазонов почтовых индексов, поэтому она выглядит следующим образом:
user_id | start | end
Чем у меня есть таблица подозреваемых, где у каждого подозреваемого есть адрес (который содержитпочтовый индекс), поэтому в этом запросе я пытаюсь получить диапазон почтовых индексов - начало и конец, а также название города в этом диапазоне.
Надеюсь, это поможет.