mysql_real_escape_string / Говнокод #11698 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
(
                                SELECT SQL_CALC_FOUND_ROWS attach, blog.blogid, blog.dateline, blog.rating
                                ,blog.blogid AS blogid_order, blog.dateline AS dateline_order, blog.rating AS rating_order

                                FROM vbul_blog AS blog
                                LEFT JOIN vbul_userlist AS buddy ON (buddy.userid = blog.userid AND buddy.relationid = 218376 AND buddy.type = 'buddy')
LEFT JOIN vbul_userlist AS ignored ON (ignored.userid = blog.userid AND ignored.relationid = 218376 AND ignored.type = 'ignore')
                                LEFT JOIN vbul_blog_user AS blog_user ON (blog_user.bloguserid = blog.userid)

                                WHERE ((options_ignore & 1 AND ignored.relationid IS NOT NULL) OR (options_buddy & 1 AND buddy.relationid IS NOT NULL) OR (options_member & 1 AND (options_buddy & 1 OR buddy.relationid IS NULL) AND (options_ignore & 1 OR ignored.relationid IS NULL))) AND (~blog.options & 8
                                                OR
                                        (options_buddy & 1 AND buddy.relationid IS NOT NULL))
                                 AND state IN('visible') AND blog.pending = 0 AND blog.dateline <= 1346700322

                        ) UNION (
                                SELECT attach, blog.blogid, blog.dateline, rating,
                                        blog.blogid AS blogid_order, blog.dateline AS dateline_order, blog.rating AS rating_order

                                FROM vbul_blog AS blog


                                WHERE blog.userid IN (218376)

                        )
                        ORDER BY dateline_order DESC
                        LIMIT 0, 5;

Сей чудесный запрос притаился где-то в недрах форума vbulletin

Запостил: vagrand vagrand, (Updated )

Комментарии (8) RSS

  • Подозреваю, условие в первом WHERE генерируется автоматом из каких-то выбранных юзером фильтров, потому говна не вижу.
    Ответить
    • И это по вашему отменяет говнокодство сего запроса?
      Он вешает мой сервер на 16 ядер и 32 гига ОЗУ.
      Ответить
      • Если это вертится на MySQL:
        Не работал конкретно с vbulletin, но vbul_blog скорей всего не бывает без соответствующей строки в vbul_blog_user. Поменяй для этого джоина LEFT на INNER, убедись что есть индекс на bloguserid/userid есть, и поставь этот джоин перед остальными. У LEFT-ов в мускуле есть такая непонятная фича - они не пользуются индексами...
        Ещё иногда дополнительно помогает перенос условий, относящихся к основной таблице в ON первого же INNER JOIN-а - получается такой себе фильтр перед попыткой джоинить остальное месиво. Но тут уж надо подоробнее с кодом разбираться, как этот condition строится. 🙂

        А вообще надо смотреть внимательно на структуру таблиц. Иногда пара ключей превращают 2 минуты раздумий в 100-200 мс.

        А по поводу вопроса - да, отменяет. Говно либо в структуре базы, либо в коде, который генерит этот запрос. Но не в самом запросе.
        P.S. А ещё скажи спасибо что LIMIT 0,5, а не, скажем LIMIT 100500,5 - он бы тогда не то, что повесился... Он бы тогда сконструировал мега-систему, чтоб когда дёрнется верёвка на его шее - его ещё пристрелило, вылило ведро кипящей смолы, утопило, и взорвало. 🙂
        Ответить
        • Благодарю за разяснения по оптимизации. Вы удивитесь но я таки знаю как это надо делать. Вопрос не в том можно ли оптимизировать запрос а в том что оно вот такое ужасное есть и его сперва надо отловить в логе медленных запросов, потом найти де же оно в коде собирается, а потом еще и подумать кк же его изменить да еще и так, что бы обновления форума затем встало.
          И если бы это был единственный пример некомпетентности разработчиков данного форума в плате оптимизации структуры БД и запросов, так нет, мне каждую неделю по 1-2 запроса приходится переделывать.
          Ответить
  • Выглядит целиком как выхлоп генератора. А они в запросах как-то не ахти. Хотя, один мой знакомый, вот он мог бы дать фору генератору любому.
    Ответить
    • Каждое слово пиши с большой буквы и без подчеркиваний.
      А то тебе теперь хоть std:: добавляй.
      На веки ваш QLispGovno.
      Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8