Соединения 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
Соединения SQL против единой таблицы: разница в производительности?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.