Мне нужно оптимизировать следующий запрос, но я не могу задаться вопросом, как.
select distinct v.codvia,
v.codproine,
v.codmunine,
tv.SIMBOLO as SIMBOLO_TIPO_VIA,
tv.NOMBRE as TIPO_VIA,
c.nombrevia as NOMBRE_VIA,
v.cp,
m.nombre as NOMBRE_MUNICIPIO ,
pr.nombre as NOMBRE_PROVINCIA
from tdinumvias v, tdimunicipio m, tdivia c, cditipovia tv, tdiprovincia pr
where (pr.codine = v.codproine) and
(m.codproine = v.codproine and m.codine = v.codmunine) and
(c.codproine = v.codproine and c.codmunine = v.codmunine and
c.codvia=v.codvia and tv.idtipovia=c.idtipovia)
существуют индексы, созданные для: v.codproine, v.codvia, v.codmunine, c.codmunine,pr.codine, m.codine, c.codproine, v.idtipovia и c.idtipovia
В соответствующих таблицах, но производительность все еще очень плохая.
Добавлено из комментариев:Размеры таблицы в tdinumvias составляют 11M, в tdimunicipio 10K, в tdivia 970K, остальные имеют только несколько рядов.
Это занимает чуть меньше секунды, и мне было интересно, можно ли довести его до 100 - 200 миль.
Обновление:
Наконец, мы создали новую промежуточную таблицу с предварительно вычисленными и скомпилированными cp, codproine и codmunie в виде представления, а затем заставим первый запрос получить данные из этогопросмотр, это получает запрос в 300-400 миллис.это не так хорошо, как мы хотели, но все в порядке.
Спасибо