Как оптимально хранить записи с множеством различных характеристик?

Необходимо регистрировать проходящие вещи. Вещи, как правило, разные, причем какие вещи придут завтра - неизвестно. Разработали определенный набор характеристик, которыми можно описать любую проходящую вещь. В основном - это набор целочисленных значений и несколько строк на запас:
`type` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item type',
`city` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item base geolocation',
`post` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item time post',
`stop` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item time expiration',
`flid` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item flag id',
`hgsz` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item huge size',
`phct` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item photos count',
`addr` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item destination address handle',
`made` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item made in country index',
`p00v` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 00: 0..4294967295',
`p01v` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 01: 0..4294967295',
`p02v` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 02: 0..4294967295',
`p03v` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 03: 0..4294967295',
`p04v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 04: 0..255',
`p05v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 05: 0..255',
`p06v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 06: 0..255',
`p07v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 07: 0..255',
`p08v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 08: 0..255',
`p09v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 09: 0..255',
`p10v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 10: 0..255',
`p11v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 11: 0..255',
`p12v` SET( 'A','B','C','D','E','F','G','H','I','J','K','L','M',
	'N','O','P' ) NOT NULL DEFAULT ''	COMMENT 'Item set of values',
`p13h` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item str 13 hash value',
`p14h` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item str 14 hash value',
`p15h` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item str 15 hash value',
`p13v` VARCHAR( 128 ) NOT NULL DEFAULT ''	COMMENT 'Item str 13: 128 chr len',
`p14v` VARCHAR( 128 ) NOT NULL DEFAULT ''	COMMENT 'Item str 14: 128 chr len',
`p15v` VARCHAR( 128 ) NOT NULL DEFAULT ''	COMMENT 'Item str 15: 128 chr len',
`p16v` VARCHAR( 32  ) NOT NULL DEFAULT ''	COMMENT 'Item str 16: 032 chr len',
`p17v` VARCHAR( 32  ) NOT NULL DEFAULT ''	COMMENT 'Item str 17: 032 chr len',
`deli` TEXT NOT NULL				COMMENT 'Item delivery information',
`payi` TEXT NOT NULL				COMMENT 'Item pay information',
`info` TEXT NOT NULL				COMMENT 'Item information text',
`cmsg` TEXT NOT NULL				COMMENT 'Item customer message',


В коде значения полей понимается на основе типа вещи.
Размер таблички большой, но не превышающей максимального значения INT - старые записи удаляются.

Поиск по таблице должен осуществляться, иногда - по одному-двум полям, как правило - с заданием целой кучи параметров, в том числе и строковых. Для ускорения поиска по строкам выделено три поля ( p13h, p14h, p15h ) с указанием первых четырех байт хеша значений этих полей.

Вопрос:
Если такой вариант жизнеспособен, как лучше и правильно выстроить индексацию?

Спасибо.
  • Вопрос задан
  • 2201 просмотр
Пригласить эксперта
Ответы на вопрос 1
qmax
@qmax
программер
Если схема данных заранее неизвестна, то имеет смысл посмотреть на безсхемные базы данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы