Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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