Должен ли я использовать один большой оператор SQL Select или несколько небольших?

Я создаю страницу PHP с данными, отправленными из MySQL.

Лучше ли иметь

  • 1 запрос SELECT с 4 соединениями таблицы или
  • 4 небольших запроса SELECT без объединения в таблицу; Я выбираю из идентификатора

Что происходит быстрее и что такое pro / con для каждого метода? Мне нужна только одна строка из каждой таблицы.

Вы должны запустить инструмент профилирования, если вы действительно обеспокоены тем, что он зависит от многих факторов, и он может варьироваться, но, как правило, лучше иметь меньше запросов и компилировать меньшее количество обращений к базе данных.

Удостоверьтесь, что вы фильтруете вещи так же, как можете использовать свое место и присоединяться к предложениям.

Но, честно говоря, это обычно не имеет значения, так как вы, вероятно, не будете сильно ударять по сравнению с тем, что может сделать база данных, поэтому, если оптимизация не является вашей спецификацией, вы не должны делать это преждевременно и делать что-то проще.

Когда вы используете JOINs вместо нескольких запросов, вы позволяете базе данных применять свои оптимизации. Вы также можете извлекать строки, которые вам не нужны (если вы хотите заменить соединение INNER несколькими выборами), что увеличивает сетевой трафик между сервером приложений и сервером базы данных. Даже если они находятся на одной коробке, это имеет значение.

Как правило, лучше иметь один оператор SELECT. Одной из основных причин наличия баз данных является то, что они быстро обрабатывают информацию, особенно если она находится в формате запроса.

Если есть какой-либо недостаток этого подхода, то есть некоторые виды анализа, которые вы не можете сделать с помощью одного большого оператора SELECT. Пуристы RDBMS будут настаивать на том, что это проблема проектирования базы данных, и в этом случае вы вернетесь к моему первоначальному предложению.

Это может зависеть от того, что вы делаете с данными после того, как вы извлечете его из БД. Если вы используете каждый из четырех результатов независимо друг от друга, было бы логичнее и четче иметь четыре отдельных оператора SELECT. С другой стороны, если вы используете все данные вместе, например, чтобы создать единую строку в таблице или что-то в этом роде, я бы пошел с единственными SELECT и JOIN.

Я немного поработал над PHP / MySQL, и я нахожу, что даже для запросов на огромных таблицах с множеством JOINs база данных довольно хороша в оптимизации – если у вас есть интеллектуальные индексы. Поэтому, если вы серьезно относитесь к производительности, начните читать оптимизацию и индексацию запросов .

Я бы сказал 1 запрос с соединением. Таким образом, вам нужно попасть на сервер только один раз. И если ваши таблицы объединены с индексами, это должно быть быстро.

Хорошо в Oracle вы хотели бы воспользоваться кешированием запросов, и если у вас много маленьких запросов, которые вы выполняете в своей последовательной обработке, это сосать, если последний запрос вытолкнул первый из кэша … как раз вовремя, чтобы вы обошли вокруг и снова запустили этот первый запрос (с разными значениями параметров) на следующем проходе.

Мы строили выходной файл XML с использованием хранимых процедур Java и определенно находили время прохождения в оба конца каждого отдельного запроса, которые нас ест. Мы обнаружили, что гораздо быстрее получить все данные за несколько запросов, а затем подключить эти значения в XML DOM по мере необходимости.

Единственным недостатком является то, что код Java был немного менее изящным, поскольку выборка данных теперь была удаленной от ее использования. Но нам нужно было создать большой сложный XML-файл как можно ближе к нулю, поэтому нам нужно было оптимизировать скорость.

Однако будьте осторожны при работе с таблицей слияния. По моему опыту, хотя одно соединение может быть хорошим в большинстве ситуаций, когда задействуются таблицы слияния, вы можете столкнуться с странными ситуациями.