Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Доброго времени суток. Возник такой вопрос.
Есть допустим таблица на 400к строк, описывающая скажем пользователей.
Некоторых из них (штук 100-200МАКС) мне нужно отметить флагом. Допустим ВИП юзеры. Имеет ли смысл хранить булево значение как столбец таблицы юзерс, или лучше сделать vipusers и по id хранить флаги ? При выборке, естественно использовать join ?
Аналогом вопроса может стать допустим расклад в котором есть таблица пользователей и только 1% заполняет поле "о себе"(текст). Возможно имеет смысл также разбивать на две таблицы, чтобы не хранить пустые поля в большой таблице ?
Видел такие решения у некоторых программистов, дальше мне рассказывали что пишется хранимая процедура, и собирает чтото кудато на уровне базы, и маол мегобыстро работает и оптимально и т.п
Сам сколько не читал книг по мускулю везде говорят о неидеальности хранимых процедур и зла от джойнов
Заранее спасибо
Неактивен
привет.
по первому вопросу.
заводите отдельную табличку для ВИП юзеров и храните там id. Наличие id юзера в табличке уже само по себе флаг. при выборке ТОЛЬКО ВИП юзеров строите запрос от этой таблицы, к ней inner join общей таблицы юзеров. Процедура "отметить флагом ВИП юзера" превращается в банальный insert в табличку с одним полем.
ispolin08 написал:
допустим расклад в котором есть таблица пользователей и только 1% заполняет поле "о себе"(текст)
если это поле не используется в условиях запроса, то не имеет особого смысла выносить его в отдельную таблицу. правды тут есть оговорки: если поле "о себе" типа СHAR или TEXT, то имеет смысл вынести. Поле типа CHAR будет занимать место, даже если пустое, поле типа TEXT, при исполнении запроса с использованием временной таблицы(в EXPLAIN - using temporary table) заставит МySQL создавать временную таблицу на диске, что не очень хорошо отразится на производительности.
а по поводу "зла от джойнов" - они(авторы книг) IMHO просто не умеют их готовить :-)
Неактивен
Про «не умеют готовить join согласен», про отдельную табличку — нет
Ну, точнее, не совсем. В отдельную табличку стоит утаскивать тогда, когда наличие
VIP ни на что не влияет (или влияет на очень небольшое количество запросов). Если
же VIP Вы вытаскиваете почти в каждом запросе, то отделять в отдельную табличку
нет смысла — все равно будете каждый раз вытаскивать эти данные.
Неактивен
Посмотрите обсуждение этого вопроса в теме http://sqlinfo.ru/forum/viewtopic.php?id=209
Неактивен
да, paulus, пожалуй с хранением ВИП-признака в отдельной таблице я сплоховал. при обычной работе с пользователями(получение записи о пользователе по уникальному полю) предложенный мной вариант мягко говоря не совсем хорош.
Неактивен
Страниц: 1