Может кто-нибудь объяснить разницу между BOOL и BINARY? Мне хватит и статейки на русском. Хочу хранить просто true или false. Сам для этого использовал BOOL, но сегодня увидел, что в JohnCMS для этого используют BINARY(1). Мелочь, но глупо, я считаю.
Miha:
Может кто-нибудь объяснить разницу между BOOL и BINARY? Мне хватит и статейки на русском. Хочу хранить просто true или false. Сам для этого использовал BOOL, но сегодня увидел, что в JohnCMS для этого используют BINARY(1… Подробнее
честно незнаю, гугл тоже нечего путнего не сказал:( сам использую Bool
Miha:
Может кто-нибудь объяснить разницу между BOOL и BINARY? Мне хватит и статейки на русском. Хочу хранить просто true или false. Сам для этого использовал BOOL, но сегодня увидел, что в JohnCMS для этого используют BINARY(1… Подробнее
Полагаю, ты про MySQL. В памяти они занимают оба по 1 байту (Bool = tinyint(1)), здесь может, на мой взляд, различаться может только скорость. Т.е. нужно просто написать тесты.
ImIeee, про тесты я и не подумал. Конечно, я не такой маньяк, чтобы оптимизировать до сотых секунды (для моего движка это не нужно), но всё же интересно.
Думаю над структурой ЛС и возник такой вопрос. Допустим, есть одна таблица для всех сообщений. Человеку приходит сообщение. Он заходит в почту и читает. Скрипт при этом делает что-то вроде "SELECT * FROM `mail` WHERE (`to` = '$myusername') AND (`new` = true) LIMIT 10 --" А что, если новых сообщений больше 10? Не делать же выборку всей таблицы. Для какой-никакой разгруженности есть идея создать таблицу для новых и таблицу для прочитанных сообщений, но проблема всё равно остаётся.
тебе имено цыферка нужна сколько сообщений? если да, то через count, если нет, то кто мешает почту на страницы разбить, и делать выборку по 5 или 10 смс на страницу.
"тебе имено цыферка нужна сколько сообщений?" - нет, это легко. Ты меня не понял. Предположим, у меня в таблице 100500 непрочитанных сообщений плюс over9000 прочитанных. А в запросе я выбираю только первые 10. Даже если я сделаю выборку из 100500 записей, то откуда я узнаю, что новых сообщений не больше? Тогда одно сообщение останется непрочтённым. А делать выборку по всей таблице сообщений невыгодно, так как сообщений может быть 1ккк. Теперь понятно?
Другими словами, зачем делать "SELECT ..." (по всей таблице с миллионом сообщений), если новых сообщений всего 3? И зачем делать "SELECT ... LIMIT 10", если непрочитанных сообщений 100?
Я придумал один способ, чтобы однозначно узнать примерное количество новых сообщений, но он тоже не совсем оптимизирован. Делается запрос "SELECT ... LIMIT 10". Если возвращается 10 строк, то делается запрос с большим лимитом. Запрашиваем "SELECT ... LIMIT 20". Если количество строк меньше 20, то всё ок, выводим сообщения.
вроде понял:), а если сделать дополнительную табличку в которых храни общее количество смс, прочитанных и не прочитанных, запрос к такой таблички пустяк, но ты точно будет знать кол. прочитанных.
23 апр 2012 в 16:56