>>>Посоветуйте плиз. что-нить
>>Задача ОЧЕНЬ тривиальна.
>>Поэтому я бы посоветовал почитать чего-нибудь из теории баз данных.
>
>Я базы данных уже программирую, может быть этот вопрос действительно тривиальный, но
>при изучении баз ну не сталкивался я с таким нигде. Большая
>таблица - без проблем, много таблиц - тоже можно, а специальную
>структуру для многих отдельных одинаковых таблиц - тут вопрос. Может направите
>меня по конкретной ссылочке, либо опишете подход в двух словах, и
>проблема разрешится очень быстро, если действительно есть тривиальное решение.
>
>С уважением, Андрей
Да нечего мудрить особо. Создавайте одну большую таблицу и не мучайтесь. Создайте индекс по полю UserName, и тогда MySQL при запросе типа
select * from BigTable where UserName = "elvenic"
не будет перебирать все записи, а по индексу быстренько найдет и вернет именно записи для юзера "elvenic". С помощью команды 'explain select <...>' убедитесь что индекс действительно используется.
Если, к примеру в вашем чате 50000 юзеров, и для каждого хранить 1000 последних сообщений, то это всего выходит 50 млн. записей - MySQL не должен иметь проблем с такой таблицей. Только надо убедиться что файловая система на машине где таблицы хранятся не ограничивает макс. размер файла, скажем, в 2 гигабайта - а то, кажется, Linux'овая ExtFS2 имела какието похожие ограничения.
Теория: если подумать логически, то как база данных может эффективно работать с массивом таблиц как с одной таблицей? Все равно ей нужно индекс (бинарное дерево кекое-то, например) строить чтоб он охватывал все записи всех таблиц.
И как вы себе представляете работу с массивом таблиц? Сначала по имени юзера находите имя (или индекс, если мы говорим о массиве) таблицы - наверное поиском в другой таблице с учетными данными всех юзеров - а потом ищете в этой таблице? Но так вы просто вручную делаете то что база данных делает автоматически используя индексы. Не стоит ей в этом мешать.