2010-03-29 4 views
0

неопытный вопрос:MySQL: Хранение нескольких текстовых полей для звукозаписывающей

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

Иными словами:

ID | text1 | text2 | text3 | .... | text10

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

спасибо.

ответ

3

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

пару вещей отметить:

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

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

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

+0

SELECT будут всегда и основаны только на целых идентификаторах, а не на тексте. – Tom

Смежные вопросы