скорость работы UNION

hated
Дата: 18.01.2013 12:58:14
Здравствуйте.

В общем такая проблемка:

Есть две Одинаковые по структуре бд, мне нужно сделать запрос объединяющий две идентичные таблицы из этих бд и сортирующий определенным образом результаты.

Я делаю
Select * from db1.tablename
UNION
Select * from db2.tablename
Order by ID


Отрабатывает за 1 сек. - это много...
По отдельности эти два запроса работают не дольше 0,03 сек.

Сортировка не при чем её вообще можно убрать, получим то же время работы... Я так понимаю проблема в том что UNION их группирует-сравнивает чтобы не выводить одинаковые записи и от туда такие временные затраты...

Следовательно вопрос:
Как склеить эти два запроса чтобы время было более менее адекватным?
Akina
Дата: 18.01.2013 12:59:36
UNION ALL - не катит?
tanglir
Дата: 18.01.2013 12:59:37
hated,

UNION ALL?
hated
Дата: 18.01.2013 13:00:55
Пробовал уже - без разницы...
tanglir
Дата: 18.01.2013 13:02:09
hated,

покажите explain-ы каждого из подзапросов и "общего" запроса.
hated
Дата: 18.01.2013 13:02:46
Естественно там запросы помассивнее приведенных, то для наглядности! Но факт остаётся фактом, порознь работают в среднем работают за 0.014, а через юнион больше секунды...
tanglir
Дата: 18.01.2013 13:09:16
ХШ говорит, что сортировка в случае отдельного запроса может использовать индекс, а в случае юниона серверу придётся сортировать через временную таблицу, отсюда и замедление.
Но без эксплейнов реальных запросов на реальных данных это всё - гадание на кофейной гуще.
hated
Дата: 18.01.2013 13:09:35
не совсем понял что такое explain-ы?! не это?
tarting 0.000107
checking permissions 0.000002
checking permissions 0.000001
checking permissions 0.000001
checking permissions 0.000001
checking permissions 0.000001
checking permissions 0.000002
Opening tables 0.000023
System lock 0.000004
Table lock 0.000006
init 0.000082
optimizing 0.000020
statistics 0.000059
preparing 0.000026
executing 0.000002
Sending data 0.000855
optimizing 0.000011
statistics 0.000023
preparing 0.000006
executing 0.000003
Sending data 0.000029
executing 0.000002
Sending data 0.000535
executing 0.000002
Sending data 0.000058
executing 0.000002
Sending data 0.000047
executing 0.000002
Sending data 0.000040
executing 0.000001
Sending data 0.001049
executing 0.000002
Sending data 0.000024
executing 0.000001
Sending data 0.000454
executing 0.000002
Sending data 0.000025
executing 0.000001
Sending data 0.001891
executing 0.000003
Sending data 0.004451
executing 0.000003
Sending data 0.000138
executing 0.000002
Sending data 0.000023
executing 0.000002
Sending data 0.003195
executing 0.000003
Sending data 0.001608
executing 0.000003
Sending data 0.000019
executing 0.000001
Sending data 0.000505
executing 0.000003
Sending data 0.001992
executing 0.000002
Sending data 0.001779
executing 0.000003
Sending data 0.003138
executing 0.000003
Sending data 0.004631
executing 0.000003
Sending data 0.000216
executing 0.000003
Sending data 0.004818
executing 0.000003
Sending data 0.000187
executing 0.000002
Sending data 0.000660
executing 0.000003
Sending data 0.000183
executing 0.000003
Sending data 0.000141
executing 0.000002
Sending data 0.000385
executing 0.000003
Sending data 0.000163
executing 0.000002
Sending data 0.000024
end 0.000004
query end 0.000001
freeing items 0.000033
logging slow query 0.000002
cleaning up 0.000003
hated
Дата: 18.01.2013 13:14:51
Или вы имеете ввиду EXPLAIN select * from.... ?
tanglir
Дата: 18.01.2013 13:17:21
hated
Или вы имеете ввиду EXPLAIN select * from.... ?
да, именно это.