За последние 24 часа нас посетили 20088 программистов и 1693 робота. Сейчас ищут 1842 программиста ...

Как лучше оптимизировать запрос %name%?

Тема в разделе "MySQL", создана пользователем Walk, 11 авг 2017.

  1. Walk

    Walk Активный пользователь

    С нами с:
    7 сен 2008
    Сообщения:
    452
    Симпатии:
    86
    Здравствуйте

    По работе вникаю в новый проект, решаю накопившиеся баги. Решая один из них, увидел такую часть запроса:

    Код (Text):
    1. `post`.`tags` LIKE 'пресс-релиз,%' OR
    2. `post`.`tags` LIKE '%, пресс-релиз,%' OR
    3. `post`.`tags` LIKE '%,пресс-релиз' OR
    4. `post`.`tags` LIKE 'пресс-релиз'

    Мало того, что такой запрос некорректен - например он не находит строку "Болгария, статистика, пресс-релиз", возникает вопрос - а не лучше ли просто написать:

    Код (Text):
    1. `post`.`tags` LIKE '%пресс-релиз%'
    ?

    P.S. под "пресс-релиз", разумеется, подразумевается любое слово (тег).
    P.P.S. Замерял выполнение запросов в phpMyAdmin, второй выполняется раза в два быстрее, но там цифры очень сильно прыгают, не знаю на сколько корректно так заменять скорость выполнения запросов.
     
  2. t1grok

    t1grok Новичок

    С нами с:
    29 янв 2017
    Сообщения:
    119
    Симпатии:
    32
    По всей видимости так сделано для полного совпадения тега. У вас же может быть тег "пресс-релиз президента", "прикладная статистика", "вычислительная статистика" и чисто по LIKE '%words%' вы будете подхватывать частичные вхождения, а не полные.

    P.S. По человечески, лучше и производительней вариант с хранением тегов отдельно, с отношением к другим сущностям many-to-many.
     
    MouseZver нравится это.
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.331
    Адрес:
    Лень
    ++++++++++++++++++++++++++++++++++++++
     
  4. Walk

    Walk Активный пользователь

    С нами с:
    7 сен 2008
    Сообщения:
    452
    Симпатии:
    86
    ...переписать весь проект с нуля. Но такую задачу, и время на неё, никто не дает.