миллиарды подписок? Пожалуйста, покажите сокращенный пример значения TEXT
. Вы пробовали FIND_IN_SET()
?
В одном поле TEXT
отображается до 5000 подписок для одного пользователя? Или наоборот - до 5 тысяч пользователей на один журнал?
В любом случае было бы лучше иметь таблицу с двумя столбцами:
CREATE TABLE user_sub (
user_id INT UNSIGNED NOT NULL,
sub_id INT UNSIGNED NOT NULL,
PRIMARY KEY(user_id, sub_id),
INDEX(sub_id, user_id)
) ENGINE=InnoDB;
Два составных индексы позволяют очень эффективно находить подписки 5 КБ для пользователя или 500 КБ для подпрограммы.
Сократить идентификатор менее 500 КБ до MEDIUMINT UNSIGNED
(ограничение 16 МБ вместо 4 миллиардов; 3 байта вместо 4 ).
Сокращение идентификатора less-5K до SMALLINT UNSIGNED
(ограничение 64K вместо 4B; 2 байта вместо 4).
Если вы хотите, вы можете использовать GROUP_CONCAT()
для реконструировать коммалист. Обязательно измените group_concat_max_len
на достаточно большое число (по умолчанию только 1024 байт .)