Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Количество полей в таблице и производительность


Автор: 02077461 2.4.2007, 17:30
Привет,  у меня возник вопрос по производительности MySQL сервера:
есть структура, содержащая много полей. Поля логически разбиты на некоторые группы, в частности адрес_типа1 (7 полей), адрес_типа2(4 поля).
Как лучше проектировать систему:
1) все поля в одной таблице, делать выборку по нужным полям.
2) Создать дополнительные таблицы, делать выборку JOIN`ом.

И вообще, как влияет количество полей в таблице на производительность сервера?..
Заранее спасибо.

Автор: AntonSaburov 2.4.2007, 18:37
Из одной таблицы всегда быстрее вытаскивать данные - но в то же время это редкость - часто приходится делать JOIN. Даже в случае один-к-одному - бывает, что данных не так много в каком-либо столбце и лишняя память съедается.
Да и некоторые сервера имеют ограничения на размер записи (соотв-но и количество полей)

Надо смотреть по задаче

Автор: SergeBS 4.4.2007, 12:12
02077461, 
Читай насчет нормальных форм. Т.е. любую книжку по СУБД, в которой есть слова "нормальная форма", "нормализация"... Иначе дров наломаешь.

Автор: 02077461 4.4.2007, 15:55
Спасибо за совет. Буду просвещаться.

Автор: anurbol 14.9.2010, 08:15
Решил продолжить тему, а не создавать новую. Считаю тему нераскрытой! Люди, очень интересует сабж, очень очень важно. Сейчас проектируется бд, и очень важно решить, будут ли храниться данные, не очень относящиеся друг к другу, в одной таблице но с 100 полями, либо в 2-х логически разделенных но с полями по 50 в каждой? Понятно что второй вариант намного лучше в плане нормализации, однако он потребует очень сильной корректировки движка что очень геморно. 

Вопрос: как сильно влияет, и влияет ли вообще количество полей в таблице на производительность, даже если не использовать SELECT *, а только SELECT needed_field1, needed_field2, needed_field3

Автор: Akina 14.9.2010, 08:39
Надеюсь, тебе не нужна прописная истина, что "если выбросить из таблицы все поля, не использованные в запросе, будет получена максимальная скорость обработки"?
Так вот - твой вопрос без кучи дополнительных данных лишён смысла.
На ответ будет влиять как соотношение количества запросов к одной/двум таблицам, так и количество в среднем выбираемых записей, процент кэшированных данных, повторяемость запросов и кэширование результатов, количество клиентов и погода на Марсе ... в общем, ТОЛЬКО опытным путём можно узнать, каково влияние в каждом отдельном конкретном случае. 
Но и оно может одним махом поменяться от незначительных на первый взгляд изменений.
В общем случае - разделение 1:1 следует однозначно рекомендовать, когда существуют устойчивые группы наборов полей выборки, позволяющие не затрагивать одну или несколько частей совокупного набора данных.

Автор: anurbol 14.9.2010, 08:44
спасибо за ответ. буду наверное разделять, но это такой геморрой....

Автор: Akina 14.9.2010, 08:49
Цитата(anurbol @  14.9.2010,  09:44 Найти цитируемый пост)
это такой геморрой

Ой, да ладно... в чём?
Выполняем разделение данных на несколько таблиц. Пишем вьювы, объединяющие данные и представляющие их так, как будто структура не поменялась (а вьюв 1:1 - однозначно обновляемый). После чего спокойно, не останавливаясь, пишем новый код сразу на новую структуру, а существующий плавно переделываем со старой структуры на новую. Когда всё переделано - просто прибиваем вьюхи.

Автор: anurbol 14.9.2010, 08:57
Цитата

пишем новый код сразу на новую структуру

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

Добавлено через 44 секунды
вопрос как бэ закрыт, но ценные советы и ответы будут приветствоваться.

Автор: hail 25.9.2010, 14:28
зависит от цели. Если количество данных планируется хранить большое и пользователей много и всем информация нужна сразу и ждать просто не как нельзя  -  тогда нормализация. Здесь кратко:
http://www.wwwmaster.ru/article.php?nart=21  . А если это не проблема - то какая разница. Но делать нормализацию - это красиво

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)