SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.06.2011 15:57:22

nexus
Завсегдатай
Зарегистрирован: 26.11.2010
Сообщений: 35

Количество таблиц в базе данных MySQL

Здравствуйте!
Подскажите пожалуйста, существуют ли ограничения на количество таблиц в базе данных MySQL?
Есть проект в котором для каждого пользователя хочу создавать отдельную таблицу. Будет ли это решение оптимальнее, чем одна огромная таблица для всех пользователей?

Неактивен

 

#2 10.06.2011 22:51:19

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Количество таблиц в базе данных MySQL

Вот цитата из одного источника

Кол-во таблиц и количество записей не лимитируются.
Кол-во таблиц myisam зависит от ограничения ОС в размещении нужного количества файлов (кол-во таблиц * 3) и от объема несущих дисков.
Для InnoDB - это ограничение на размер одного файла, но можно создавать сколько угодно файдов для хранения. Объем ограничивается размером дисков.
Количество записей в одной таблице ограничивается объемом несущих дисков для любого типа таблиц. Для InnoDB можно разбивать базу и таблица будет занимать место в нескольких базах. В MyIsam можно разбивать таблицу на несколько и пользоваться таблицей merge для просмотра всей таблицы. Размер одной таблицы ограничивается максимаьным размером файла в ОС.

nexus написал:

Будет ли это решение оптимальнее, чем одна огромная таблица для всех пользователей?

Нет, это не правильное решение.
Делайте одну таблицу.
Есть много решений для масштабирования. А каком количестве записей вообще идёт речь ?

Неактивен

 

#3 10.06.2011 23:57:21

nexus
Завсегдатай
Зарегистрирован: 26.11.2010
Сообщений: 35

Re: Количество таблиц в базе данных MySQL

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


CREATE TABLE IF NOT EXISTS `site_questionnaire` (
  `questionnaire_id` int(11) NOT NULL AUTO_INCREMENT,
  `project_id` int(11) NOT NULL,
  `addtime` int(11) NOT NULL,
  `user_ip` int(10) unsigned NOT NULL,
  PRIMARY KEY (`questionnaire_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `site_response` (
  `response_id` int(11) NOT NULL AUTO_INCREMENT,
  `questionnaire_id` int(11) NOT NULL,
  `item_id` int(11) NOT NULL,
  `response` text NOT NULL,
  PRIMARY KEY (`response_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
 


Насколько правильной будет такая структура данных и как она себе поведет при большом количестве записей?

Неактивен

 

#4 11.06.2011 14:14:14

memba
Участник
Зарегистрирован: 11.06.2011
Сообщений: 12

Re: Количество таблиц в базе данных MySQL

Кол-во полей в таблице не влияют на скорость выборки. Разбивать нужно так, что бы не капаться лишний раз, но что бы и удобно было.

Неактивен

 

#5 11.06.2011 14:29:42

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Количество таблиц в базе данных MySQL

Не совсем понял, как этот запрос связан с пользователем ?

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

Если во всех таблицах будет user_id, то не важно сколько будет записей, вы будите вынимать записи всегда по индексу user_id.

А ещё таблицы лучше в InnoDB

Неактивен

 

#6 11.06.2011 16:29:08

nexus
Завсегдатай
Зарегистрирован: 26.11.2010
Сообщений: 35

Re: Количество таблиц в базе данных MySQL

А чем InnoDB лучше MyISAM? где можно почитать про то, из каких соображений нужно выбирать ту или иную таблицу!

Неактивен

 

#7 11.06.2011 18:18:17

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Количество таблиц в базе данных MySQL

nexus написал:

А чем InnoDB лучше MyISAM? где можно почитать про то, из каких соображений нужно выбирать ту или иную таблицу!

Почитать можно в гугле http://www.google.ru/#sclient=psy&h … mp;bih=821

Различий довольно много, но в вашем случае достаточно аргумента что MyISAM в случае записи, блокирует всю таблицу. То есть пока пользователю Васе делают update, все остальные пользователи ждут :-)

Отредактированно evgeny (11.06.2011 18:18:50)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson