2013-03-21 1 views
0

У меня есть DB запрос SQLite, который выглядит примерно так:SQLite объединение всех оптимизация

SELECT 
    origin, 
    destination, 
    weight, 
    rate, 
    0 as group 
    from groupAZones, groupARates 
    where 
    tms = groupZone 

union all 

SELECT 
    origin, 
    destination, 
    weight, 
    rate, 
    1 as group 
    from groupBZones, groupBRates 
    where 
    tms = groupZone 

    union all 

SELECT 
    origin, 
    destination, 
    weight, 
    rate, 
    2 as group 
    from groupCZones, groupCRates 
    where 
    tms = groupZone 

    union all 

SELECT 
    origin, 
    destination, 
    weight, 
    rate, 
    3 as group 
    from groupDZones, groupDRates 
    where 
    tms = groupZone 

Есть хороший способ оптимизировать запрос, как это? Я пытаюсь создать простое представление, которое объединяет эти 4 таблицы. При использовании в качестве запроса на просмотр запросы в представление занимают около 13 секунд.

Я попытался создать индексы для 4 таблиц, но, похоже, это не помогло.

Я как бы начинающий, когда дело доходит до SQL, я знаю достаточно, чтобы делать простые вещи, но я все еще изучаю продвинутые трюки.

Любые указатели или информация были бы полезны.

+0

О каком количестве данных вы имеете дело? – jhewlett

+0

Если я построю таблицу с использованием того же запроса, она будет работать около 4,5 миллионов записей и около 125 МБ на диске. –

+1

Показать результат 'EXPLAIN QUERY PLAN' для этого запроса. –

ответ

1

CL указал, что я должен запустить команду EXPLAIN QUERY PLAN. Это привело к открытию того, что два из 4 индексов не используются.

Спасибо CL!

Мне все еще интересно, есть ли лучший способ сделать этот запрос, но пока он делает то, что мне нужно.