#mysql #performance
#mysql #Производительность
Вопрос:
Я разрабатываю сайт для ответов на вопросы. Ранее я создавал две таблицы: сообщения и ответы. Можно ли (запрос времени выполнения) объединить эти таблицы в один «posts», поскольку есть сходство в таких полях, как vote_up, down, flag и так далее.
Спасибо за отзывы, ребята, это таблица
CREATE TABLE IF NOT EXISTS 'posts' (
'id' int(10) unsigned NOT NULL AUTO_INCREMENT,
'date_created' datetime NOT NULL,
'date_edited' datetime DEFAULT NULL,
'post_type' tinyint(1) DEFAULT NULL,
'parent' int(10) unsigned DEFAULT NULL,
'user' int(10) unsigned NOT NULL,
'title' varchar(255) DEFAULT NULL,
'slug' varchar(255) DEFAULT NULL,
'content' text NOT NULL,
'post_status' tinyint(1) DEFAULT NULL,
'vote_up' int(10) unsigned DEFAULT '0',
'vote_down' int(10) unsigned DEFAULT '0',
'answered' tinyint(1) DEFAULT NULL,
'flag' tinyint(1) DEFAULT NULL,
PRIMARY KEY ('id')
)
Комментарии:
1. Одна вещь, которую вы действительно хотите иметь в виду, — это нормализация ваших данных (при условии, что вы используете реляционную базу данных). Если у вас действительно старое оборудование или миллионы записей, я бы не стал делать то, что вы предлагаете.
2. Опубликуйте свою схему, и мы сможем помочь вам немного лучше
3. @hafichuk вы говорите, что присоединение к ним увеличит производительность?
4. @Moss нет, совсем наоборот. Если нет веских оснований для денормализации данных, я бы не рассматривал это как возможную оптимизацию.
Ответ №1:
Конечно, там нет значимого снижения производительности. Что делает некоторое программное обеспечение для форумов, так это то, что у него есть таблица для каждой темы и таблица для сообщений. Когда создается новая тема (ваш вопрос), содержимое публикации помещается в таблицу post, а таблица темы используется для заголовка, идентификатора, возможно, некоторой категоризации и так далее.
Ответ №2:
При правильном индексировании не было бы заметного снижения производительности. Я предполагаю, что соединения между двумя разными таблицами иногда могут быть быстрее, чем объединение одной объединенной таблицы с самой собой. Но я думаю, что это скорее логическое решение. Имеет ли смысл рассматривать вопрос и отвечать одинаково? Если существует более нескольких полей, относящихся исключительно к одному или другому типу, лучше хранить их отдельно.