MySql. Лучше выбирать из множества таблиц с объединением или с использованием временных таблиц?

У нас есть отчет, который могут запускать пользователи, в котором нужно выбрать записи из 5 разных сервисов. Да нет, я использую UNION для объединения всех таблиц в один запрос, но иногда это было слишком много для сервера, и он зависал! Я оптимизировал фрагменты запроса (где и соединения таблиц), и с тех пор не было никаких сбоев, но отчет по-прежнему загружается долго (т.е. запрос очень медленный).

Вопрос в том, будет ли mysql работать быстрее и оптимальнее, если я создам 5 временных таблиц для разных типов служб, а затем выберу из всех временных таблиц? Или есть другая идея? Я мог бы, конечно, просто использовать 5 отдельных вариантов, а затем объединить их в коде (php). Но я предполагаю, что это приведет к тому, что отчет будет загружаться еще медленнее...

Есть идеи?


person esther h    schedule 21.12.2010    source источник
comment
Я мало что знаю о временных таблицах, но если бы знал, то, наверное, спросил бы вас, какие данные вы хотели бы в них поместить. Теперь я знаю, что UNION ALL намного легче, чем UNION, поэтому, если это имеет смысл в вашей ситуации, вы можете попробовать это.   -  person Spiny Norman    schedule 21.12.2010
comment
эти выборки выполняются быстро отдельно? может причина в другом? возможно, ваши выборы должны быть оптимизированы.   -  person heximal    schedule 21.12.2010
comment
Вы уверены, что вам нужен UNION? Вычисление объединения многих (больших) наборов может быть очень дорогим. Возможно, все, что вам нужно, это UNION ALL   -  person nos    schedule 21.12.2010
comment
@Spiny Я не знал об UNION ALL, сейчас я использую UNION. Просто прочитайте это сейчас www.mysqlperformanceblog.com/2007/10/05/union-vs-union-all-performance/ и я определенно перейду на UNION ALL, спасибо!   -  person esther h    schedule 21.12.2010
comment
@heximal Я оптимизировал выбор, как указано в вопросе. Но теперь у меня вопрос: использование временных таблиц увеличит скорость и оптимизацию еще больше, или лучше остаться с объединением, или, скорее, с объединением всех?   -  person esther h    schedule 21.12.2010
comment
union all будет работать быстрее, но idk, если ваша деловая логика позволяет использовать union all. временные таблицы не должны повышать производительность, поскольку операция UNION создает те же самые временные таблицы за сценой.   -  person heximal    schedule 21.12.2010
comment
@esther Хорошо, что это работает, я могу даже сделать из этого ответ! Прямо сейчас я не чувствую, что это ответ на ваш вопрос, поскольку вы спрашивали, будут ли лучше союзы или временные таблицы, и я могу только начать отвечать на это, когда вы публикуете запросы (подсказка, подсказка) :)   -  person Spiny Norman    schedule 21.12.2010


Ответы (1)


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

(на самом деле это был комментарий, но у меня пока нет таких прав..)

person Oli    schedule 21.12.2010
comment
но нет ли проблемы со скоростью при выполнении пяти отдельных поездок в базу данных? Я не знаком с тем, как все работает... кроме того, если я делаю отдельные запросы, как еще я могу объединить их в php без сохранения результатов в массивах?? - person esther h; 21.12.2010
comment
Для больших или сложных таблиц одно обращение к каждой из них быстрее, чем объединение их всех. Но все это действительно зависит от того, как вам нужно использовать данные. Вы собираетесь выводить данные прямо на экран? Трудно сказать, какой метод лучше, если мы не знаем структуру таблицы или то, что вы собираетесь делать с данными;) - person Oli; 22.12.2010