MySQL: хранение нескольких текстовых полей для записи - PullRequest
0 голосов
/ 29 марта 2010

Неопытный вопрос:

Мне нужно хранить около 10 текстовых полей неизвестной длины для каждой записи в таблице MySQL. Я ожидаю, что в общей сложности для этой таблицы не более 50 тыс. Строк, но важна скорость. Действия базы данных будут исключительно SELECTs для всех практических целей (и поиск будет осуществляться только с использованием целочисленного идентификатора PK). Я использую InnoDB.

Другими словами:

id | текст1 | текст2 | text3 | .... | text10

Поскольку я понимаю, что MySQL будет хранить текст в другом месте и использовать свои собственные индикаторы в самой таблице, мне интересно, есть ли какие-то фундаментальные последствия для производительности, о которых мне следует беспокоиться, учитывая способ хранения данных? (то есть несколько «подвыборок» из таблицы).

Спасибо.

Ответы [ 2 ]

3 голосов
/ 29 марта 2010

По сути, вы спрашиваете, требуются ли для этих 10 полей TEXT 10 отдельных запросов на поиск диска для каждой извлекаемой строки. Я не уверен, что InnoDB напишет все это подряд и сможет быстро их прочитать, и поэтому, с большинством вопросов производительности, лучше всего создать и запустить несколько простых тестов и выяснить, каковы последствия (если кто-то другой приходит и утверждает, что знает!)

Несколько замечаний:

  • Поскольку ваша таблица не такая большая и вы в основном используете SELECT, вы можете просто кэшировать данные. InnoDB может хранить фактические данные в своем пуле буферов (в отличие от MyISAM) - поэтому попробуйте установить это значение (innodb_buffer_pool_size) достаточно большим, чтобы вместить ваши данные.
  • Если вы всегда читаете все 10 столбцов и хотите использовать одно поле TEXT, вы можете добавить некоторый промежуточный код, который обрабатывает разбиение данных на 10 частей, добавив к каждому полю количество символов / байтов, которое оно имеет, так что когда вы читаете данные обратно, вы точно знаете, сколько места занимает каждая часть.
  • Если вы будете следовать вышеописанному подходу, вам может понадобиться использовать более крупное поле TEXT, например MEDIUMTEXT или LONGTEXT.
2 голосов
/ 29 марта 2010

Вы собираетесь выбирать записи по id (индексированному ключу) или по данным в текстовых полях?

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

...