ФорумРазработкаБазы данных → Уменьшение нагрузки на MySQL

Уменьшение нагрузки на MySQL

  • Kuzya

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

    Spritz 21 июля 2008 г. 8:33

    Нужно написать поиск по базе новостей. Естественно запросы на выборку совпадений идут примерно такие
    "SELECT … FROM … WHERE … LIKE %слово%"
    вот из-за %слово% нагрузка на MySQL сильно возрастает. EXPLAIN показывает что задеваются все записи в базе (а их несколько тысяч). Подскажите какие-либо варианты уменьшения такой нагрузки.
  • megabit

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

    Spritz 21 июля 2008 г. 8:35, спустя 1 минуту 46 секунд

    выбирать те поля которые нужны а не все
    т.е не SELECT * FROM…. а SELECT id,name,about….. FROM
  • Trej Gun

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

    Spritz 21 июля 2008 г. 8:49, спустя 14 минут 8 секунд

    megabit, бред!

    Kuzya, http://mabp.kiev.ua/content/2008/04/26/search_engine_works_now/
    нормально все работает
    навесь на БД индексы где надо и будет тебе щастя
  • megabit

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

    Spritz 21 июля 2008 г. 8:54, спустя 4 минуты 27 секунд

    а скажи что быстрее если 1000 запесей во всех полях
    и что будет быстрее SELECT * FROM `table` или SELECT только нужных полей FROM `table` ???
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 21 июля 2008 г. 9:16, спустя 22 минуты 20 секунд

    только нужных полей

    но ведь для новостей возможне все поля будут нужны
  • sap

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

    Spritz 21 июля 2008 г. 9:41, спустя 24 минуты 48 секунд

    Все очень редко бывают нужны.
  • Trej Gun

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

    Spritz 21 июля 2008 г. 9:45, спустя 4 минуты 2 секунды

    megabit,

    1 не храни в одной таблице стока мусора

    2 скорость от этого зависит слабо, даже дело не в скорости поиска, дело в том что когда ты извлекаешь больше инфы ты расходуешь больше памяти и время увеличиваеться засчет доступа к этой памяти. а если у тебя в таблице текс,автор,дата,категори то ты ничего не секономишь если будешь выбирать только текст.

    3 если тебе всетаки надо хранить текст на 2 и более языках то используй таблицы с префиксом для каждого языка и отдельную для метаинформации
  • megabit

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

    Spritz 21 июля 2008 г. 9:48, спустя 3 минуты 19 секунд

    1. у него записей несколько тысяч
  • Trej Gun

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

    Spritz 21 июля 2008 г. 10:13, спустя 24 минуты 45 секунд

    megabit, иди учи мат часть
    компания mysql разрабатывала свою бд на нескольких милионах записей
  • Kuzya

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

    Spritz 21 июля 2008 г. 13:43, спустя 3 часа 29 минут 44 секунды

    выбирать те поля которые нужны а не все

    Выбираются только id новостей.
    навесь на БД индексы где надо и будет тебе щастя

    Дело в том что поиск происходит по полям типа TEXT и не "слово%" а "%слово%" - насколько я знаю при этом варианте индексы не задействуются.
  • adw0rd

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

    Spritz 21 июля 2008 г. 14:39, спустя 56 минут 33 секунды

    Kuzya, да, при втором варианте не задействуются на сколько я знаю. Может юзать http://www.mysql.ru/docs/man/Fulltext_Search.html ?
    adw/0
  • Kuzya

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

    Spritz 22 июля 2008 г. 0:11, спустя 9 часов 32 минуты 1 секунду

    Хеее, спасибо, работает как и нужно было =)
    старый запрос (с LIKE) выполняется 0.0170
    с MATCH - 0,0017 =)
  • adw0rd

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

    Spritz 22 июля 2008 г. 0:49, спустя 37 минут 34 секунды

    Kuzya, :)
    adw/0
  • Trej Gun

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

    Spritz 22 июля 2008 г. 6:58, спустя 6 часов 8 минут 46 секунд

    Kuzya, чисто ради принципа сравни результаты, матч должен выдавать меньше
  • Kuzya

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

    Spritz 22 июля 2008 г. 7:12, спустя 13 минут 52 секунды


    Kuzya, чисто ради принципа сравни результаты, матч должен выдавать меньше

    Две мессаги вверх =)
    Хеее, спасибо, работает как и нужно было =)
    старый запрос (с LIKE) выполняется 0.0170
    с MATCH - 0,0017 =)

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