mysql слишком много столбцов?

Я лично рекомендовал бы нам erubis в предварительно скомпилированных шаблонах.

Особенно, если нет никакой потребности в динамической шаблонной обработке. Тогда Ваше самое большое замедление будет ограничено скоростью, на которой рубин может проанализировать рубин.

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

Компиляция однажды, используйте многих.

, О, и если Вы действительно обеспокоены скоростью, Tenjin может быть достойный внимания также (те же создатели как erubis)

http://www.kuwata-lab.com/tenjin/rbtenjin-examples.html

7
задан Welbog 28 September 2009 в 14:44
поделиться

5 ответов

Чтобы подробнее рассказать об ответе RichardOD , у вас обычно есть три варианта при работе с подтипами, и выбор зависит от что вам нужно делать с данными, о которых идет речь.

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

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

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

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

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

7
ответ дан 6 December 2019 в 11:50
поделиться

Я думаю, проблема в том, что у вас модель, подобная этой (подход хранить все в одной таблице). Этот подход , а также этот подход - две альтернативы, которые вы могли бы выбрать - я уверен, что у других есть еще несколько предложений.

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

Если вас искренне интересуют различия между тремя подходами, я порекомендовал бы купить книгу Мартина Фаулера «Шаблоны архитектуры корпоративных приложений»

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

6
ответ дан 6 December 2019 в 11:50
поделиться

Yes, use lots of columns if that makes sense. Provided you're not using an antipattern like "field1,field2,field3" etc, then it's fine.

Lots of NULLs is good, they don't hurt much. Also 200k is such a tiny number of rows you're unlikely to see many performance problems. I don't know how many inserts you're planning to do into this table, but if it is < 100 per second, I don't see anything being a problem.

You will want to index it somehow. The number of indexes will affect insert performance, but I imagine that most of your columns won't need to be indexed.

With such a small table it doesn't really matter too much - none of it. You can duplicate your data umpteen times without running into any space problems- you're in a privileged position.

2
ответ дан 6 December 2019 в 11:50
поделиться

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

Моим первым изменением было бы иметь любые данные, относящиеся только к 1 или 2 видам спорта, и хранить их в отдельные таблицы с внешним ключом из основной таблицы

0
ответ дан 6 December 2019 в 11:50
поделиться

200K умножить на 50 значений - это небольшая таблица. Не беспокойтесь о производительности, пока у вас не будут под контролем такие вещи, как простота использования и свобода от противоречий.

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

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

Если бы меня познакомили с таблицей базы данных с 40 или более столбцами, и в базе данных были бы какие-либо проблемы (производительность, повреждение или что-то еще) , Я бы посмотрел, можно ли дополнительно нормализовать эту таблицу и каковы затраты / преимущества этого.

Существует множество причин для разделения таблицы. Как сказал Райнерпост, не беспокойтесь о разделах, пока не получите контроль над нормализацией.

и каковы затраты / преимущества этого.

Существует множество причин для разделения таблицы. Как сказал Райнерпост, не беспокойтесь о разделах, пока не получите контроль над нормализацией.

и каковы затраты / преимущества этого.

Существует множество причин для разделения таблицы. Как сказал Райнерпост, не беспокойтесь о разделах, пока не получите контроль над нормализацией.

2
ответ дан 6 December 2019 в 11:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: