Мне нужно рассчитать общее количество доступных данных из базы данных, и для этого мне нужно делать соединения с несколькими таблицами. Я не могу вставить весь мой запрос, но следующая основная структура:Рассчитать количество быстрее, чем в этом запросе
select sum(qty) as qty, field
from
(
(
select SUM(table1.qty) as qty , field
from
table1
left join table2 on table1.field = table2.field
left join table3 on table3.field = table2.field
where condition
group by fieldname
)
UNION ALL
(
selecy SUM(table1.qty) as qty,field
from
table1
left join table2 on table1.field = table2.field
left join table3 on table3.field = table2.field
where condition
group by fieldname
)
UNION ALL
(
select SUM(table1.qty) as qty, field
from
table1
left join table2 on table1.field = table2.field
left join table3 on table3.field = table2.field
where condition
group by fieldname
)
...
..
12 times
) as temp
LEFT JOIN another_main_table ON another_main_table.field = temp.field
Я позаботилась индексы каждой таблицы, но есть некоторые союзы, которые занимают больше времени, чем ожидался. В этом запросе используется около 45 таблиц, и все они полностью изучены. В некоторых таблицах содержится около 2,6 миллиона записей. Можете ли вы предложить мне, как я могу получить результат за полтора секунды? На данный момент я получаю результат примерно за одну минуту.
Непонятно, что вам нужно для этого запроса. Являются ли таблицы1, table2, table3 одинаковыми во всех запросах? Если это так, просто используйте один запрос с 'WHERE Condition1 OR Condition2 OR .....' – valex
Это может быть уродливый запрос, но вам может потребоваться опубликовать более полный запрос. Возможно, вам даже понадобится опубликовать его в каком-то месте вне сайта, например pastebin.com, если он слишком велик, чтобы принять его здесь. – DRapp
эй .. Все таблицы table1, table2, table3 различны. Я знаю, что если бы я мог вставить запрос здесь, мне было бы легче направить меня .. но не могу отправлять запрос здесь, потому что .. Я ограничен, чтобы не раскрывать информацию о базе данных и таблицах :(Извините за это. –