MySQL производительность запросов - PullRequest
2 голосов
/ 26 января 2011

У меня следующая структура таблицы:

EVENT_ID(INT)    EVENT_NAME(VARCHAR)    EVENT_DATE(DATETIME)    EVENT_OWNER(INT)

Мне нужно добавить поле EVENT_COMMENTS, которое должно быть текстовым или очень большим VARCHAR.

У меня есть 2 места, где я запрашиваю эту таблицу, одно на странице со списком всех событий (на этой странице мне не нужно отображать поле event_comments).

И еще одна страница, которая загружает все детали для определенных событий, которые мне понадобятся для отображения поля event_comments.

Должен ли я создать дополнительную таблицу с event_id и event_comments для этого события? Или мне просто добавить это поле в текущей таблице?

Другими словами, что я спрашиваю, если у меня есть текстовое поле в моей таблице, но я не SELECT это, это повлияет на производительность запросов к моей таблице? 1016 *

Ответы [ 6 ]

2 голосов
/ 26 января 2011

Добавление поля в таблицу увеличивает его.

Это означает, что:

  • Сканирование таблицы займет больше времени
  • Меньше записей уместится встраница и, следовательно, в кеш, увеличивая тем самым риск пропадания кеша

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

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

1 голос
/ 26 января 2011

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

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

Это относительный раздел:

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

0 голосов
/ 26 января 2011

Сколько событий вы ожидаете иметь?

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

0 голосов
/ 26 января 2011

Это не должно быть слишком большим ударом, но если вы беспокоитесь о производительности, вы всегда должны запускать несколько тестов и запускать ОБЪЯСНЕНИЯ в своих запросах, чтобы увидеть истинный эффект.

0 голосов
/ 26 января 2011

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

В зависимости от движка, двоичные объекты хранятся либо в строке (MyISAM), частично вне страницы (InnoDB) или полностью вне страницы (в некоторых случаях плагин InnoDB).

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

Однако крайне маловероятно, что вы заботитесь о нем, поэтому вам все равно следует это сделать.Сколько строк в этой таблице?10 ^ 9?Сколько из них имеют ненулевые значения для BLOB-объекта?

0 голосов
/ 26 января 2011

Вы должны положить на тот же стол.

...