ФорумПрограммированиеPHP для идиотов → Говнокод или как писать не стоит

Говнокод или как писать не стоит

  • AlexB

    Сообщения: 4291 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 9:36, спустя 2 минуты 11 секунд

    id IN(1, 10, 100, ..)
    и
    id=1 or id=10 or id=100 or …

    Это одно и тоже. Просто первое более семантично и  компактно. Оптимизатор в итоге приведет к одному виду. Кто не верит, смотрите план запроса…
  • phpdude

    Сообщения: 26628 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 9:42, спустя 6 минут 26 секунд


    id IN(1, 10, 100, ..)
    и
    id=1 or id=10 or id=100 or …

    Это одно и тоже. Просто первое более семантично и  компактно. Оптимизатор в итоге приведет к одному виду. Кто не верит, смотрите план запроса…
    а такое чтото?

    select * from users where active=1 and (id = 1 or id=2 or id=3 or id=4 or id=5)
    в общем говном это я назвал по причине того, что пару раз сталкивался с ситуацией что такой подход "or" не использует индексы, по крайней мере составные. примари кей может он и будет юзать. но составной вроде как не особо :) на 5ой версии было дело, в то время мы с человеком еще соптимизировали такой запрос на union select ведь по сути or = union select * from users where id = 1 union select * from users where id = 2 union select …
    Спустя 44 сек.
    union select юзал индексы и мы были счастливы :)

    проверять влом но я уверен в "узколобости" мускуля, сталкивался не раз
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 9:53, спустя 11 минут 8 секунд

    Тема: не стоИт или как писать говнокод

    по старому опыту - OR действительно провоцирует full scan. на автомате стараюсь его избегать. в mysql не проверял
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26628 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 9:55, спустя 2 минуты 6 секунд


    Тема: не стоИт или как писать говнокод

    по старому опыту - OR действительно провоцирует full scan. на автомате стараюсь его избегать. в mysql не проверял
    ну уж фуллскан ты загнул конечно)

    другие то индексы может юзать, просто на максимум не будет отдачи
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 10:41, спустя 45 минут 10 секунд

    нихуя понять не могу, как ты успел написать

    бот
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 6 февраля 2010 г. 14:19, спустя 3 часа 38 минут 49 секунд


    для поулчения кучи значений по ID используется конструкция
    SELECT * FROM `users` WHERE `id` IN (1,2,3,4,5,6,7,8,9,10)

    этот вариант использует все плюсы мускуля, и не создает форичей. если id - primary key то такая выборка хоть из десятков миллионов будет за доли милисекунд выполняться. гонял такие запросы на табличке в гигабайт и 5мллн записей

    а сколько айдишников поместится в запрос не мерял?
  • phpdude

    Сообщения: 26628 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 16:16, спустя 1 час 57 минут 2 секунды

    Faster, зависит от настроек сервера, хоть миллиард.
    Сапожник без сапог
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 6 февраля 2010 г. 17:10, спустя 53 минуты 32 секунды

    по дефолту 1 метр
    http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_max_allowed_packet
    думаю лучше избегать слишком больших конструкций
  • phpdude

    Сообщения: 26628 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 17:20, спустя 9 минут 35 секунд


    по дефолту 1 метр
    http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_max_allowed_packet
    думаю лучше избегать слишком больших конструкций
    вопрос - нахуй тебе в вебе выборка для (усредним до 7 байт id = 1 000 000 / 7) ~ 140 000 записей ??? ебанулись чтоли?)

    такие выборки ты все равно не искусственно "введешь", а из селекта какого нить 100%. или ты попросишь пользователя отметить 140к чекбоксов? :D:D:D
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 17:24, спустя 4 минуты 23 секунды

    или ты попросишь пользователя отметить 140к чекбоксов? :D:D:D


    сделал мой вечер

Пожалуйста, авторизуйтесь, чтобы написать комментарий!