Соединения SQL против единой таблицы: разница в производительности?

Майкл Джексон (не тот) - famously believed to have said,

  • Первое правило оптимизации программы: не делайте этого.
  • Второе правило оптимизации программы - только для экспертов: пока не делайте этого.

Вероятно, это jointable было до того, как появились normalisation СУБД, но я думаю, что он select-statement бы расширил Правила, включив jointable их.

Многотабличные SELECT sql-query почти всегда необходимы с normalisation нормализованной моделью данных; Как sql-select это часто бывает с такого jointable рода вопросами, "правильный" ответ normalization на "денормализацию?" вопрос jointable зависит от нескольких факторов.

Платформа normalization СУБД.

Относительная производительность sql-select запросов с несколькими таблицами sql-query и запросов к одной таблице sql-syntax зависит от платформы, на select-statement которой работает ваше приложение: уровень jointable сложности оптимизаторов запросов sqlselect может варьироваться. MySQL, например, по select-statement моему опыту, невероятно быстр sql-select в запросах с одной таблицей, но joins не так хорошо оптимизирует sql-query запросы с несколькими соединениями. Это sql-query не проблема для небольших sql-syntax таблиц (скажем, менее 10 sql-join тыс. Строк), но проблема joins с большими (более 10 млн).

Объем normalisation данных

Если вы не смотрите sqlselect на таблицы в области более normalization 100 тыс. строк, в этом почти sql-join не должно быть проблем. Если normalization вы смотрите на размеры таблиц jointable в сотнях строк, я бы даже sql-join не стал думать об индексировании.

(Де-) нормализация

Вся sqlselect суть нормализации состоит join в том, чтобы минимизировать sql-syntax дублирование, чтобы гарантировать, что joins любое значение поля, которое sqlselect необходимо обновить, нужно sql-select изменить только в одном месте. Денормализация jointable нарушает это, что не представляет sql-select большой проблемы, если обновления sql-join дублированных данных происходят sql редко (в идеале они никогда joins не должны происходить). Так sql-join что подумайте очень внимательно, прежде sql-statement чем дублировать что-либо, кроме sql-select самых статических данных. Обратите sql-syntax внимание, что ваша база данных jointable может значительно вырасти

Требования normalisation / ограничения

Какие требования sql к производительности вы пытаетесь jointable удовлетворить? У вас есть sql-query фиксированное оборудование sql-query или бюджет? Иногда повышения joins производительности проще normalization всего - и даже дешевле всего sqlselect - добиться путем обновления jointable оборудования. Какие объемы sql-select транзакций вы ожидаете? Система sql-syntax бухгалтерского учета для jointable малого бизнеса имеет совершенно jointable другой профиль, чем, скажем, Twitter.

Мне joins приходит в голову последняя normalization мысль: если вы достаточно sqlselect денормализуете, чем ваша sql-statement база данных будет отличаться sql-select от плоского файла? SQL превосходно sql-query подходит для гибких данных sql-join и многомерного восстановления, но sql-query он может быть на порядок normalisation (по крайней мере) медленнее, чем sql-syntax простой последовательный sql-query или довольно просто индексированный normalisation файл.

sql

join

normalization

2022-11-07T04:20:20+00:00
Вопросы с похожей тематикой, как у вопроса:

Соединения SQL против единой таблицы: разница в производительности?