Производительность MySQL / Rails:Одна таблица, много строк по сравнениюмного таблиц, меньше строк?

StackOverflow https://stackoverflow.com/questions/796981

Вопрос

В моем приложении Rails у меня есть несколько моделей, имеющих дело с активами (вложениями, картинками, логотипами и т.д.).Я использую attachment_fu, и на данный момент у меня есть 3 разные таблицы для хранения информации в моей базе данных MySQL.

Мне интересно, повлияет ли это на производительность, если я использую STI и помещу всю информацию всего в 1 таблицу, используя столбец type и имея разные унаследованные классы.Это было бы более СУХО и проще в уходе, потому что все они имеют много общих атрибутов и характеристик.

Но что быстрее?Много таблиц и меньше строк в таблице или только одна таблица со многими строками?Или вообще нет никакой разницы?Мне придется иметь дело с большим количеством информации и множеством запросов в секунду.

Спасибо за ваше мнение!

Это было полезно?

Решение

Чем больше таблиц и меньше строк, тем, вероятно, быстрее.

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

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

Это медленнее, более хрупко, приведет к размножению вашего кода по всему приложению и создаст плохую модель.

Сделай это Только если все вещи имеют точно такие же атрибуты и то же самое (или, возможно, заменяемое Лисковым) семантическое значение в вашей проблемной области.

В противном случае, просто даже не пытайтесь этого делать.

Или, если да, спросите, почему это лучше, чем иметь одну большую карту / хэш-таблицу / ассоциативный массив для хранения всех объектов в вашем приложении (и множество функций, большинство из которых дублируются, вырезаются и вставляются и устарели, выполняя switch случаи или RTTI для определения реального типа каждого объекта).

Другие советы

Единственный способ узнать наверняка - это попробовать оба подхода и измерить производительность.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top