Mysql: оптимизация индексов - PullRequest
0 голосов
/ 28 мая 2011

Я установил MySQL Tuner, и это было результатом отчета:

  • Включить медленный журнал запросов для устранения проблем с ошибочными запросами
  • Настройте запросы на соединение, чтобы всегда использовать индексы

Итак, я включил медленный журнал запросов, и он сообщил о таких запросах:

ВЫБЕРИТЕ u.PIN, u.name, u.lastname, u.id_country, t1.id_user_list, COUNT (t2.id_user_list) AS q1 ОТ контакта AS t1, контакт AS t2, пользователь AS u ГДЕ t1.id_user = N И t2.id_user = t1.id_user_list И u.id_user = t1.id_user_list GROUP BY t1.id_user_listПОРЯДОК ПО ФИО, фамилия

И ...

ВЫБРАТЬ * ИЗ ПОЛЬЗОВАТЕЛЯ ГДЕ ГОРОД, КАК 'S' И ПОЛ = N Иflg_ban = N AND id_user! = N ORDER BY id_user DESC LIMIT N, N

Мне просто нужна помощь в оптимизации моих таблиц:

  1. contact
    • id_contact (int / primary index)
    • id_user (int / index)
    • id_user_list (int / index)
  2. user
    • id_user (int / primary index)
    • name (varchar)
    • фамилия (varchar)
    • PIN (varchar)
    • id_country (int)
    • город (varchar)
    • пол (1 или2)
    • flg_pic (1 или 0)
    • flg_hidden (1 или 0)
    • flg_ban (1 или 0)

Должен ли я индексировать все varchars, которые также используются в запросах (WHERE и ORDER)?Спасибо за вашу помощь.

1 Ответ

1 голос
/ 28 мая 2011

Вы должны выполнить команду объяснения и анализа, чтобы лучше понять, какие части запроса наиболее дорогие, и индексировать или оптимизировать эти поля.

например:

explain analyze SELECT * FROM user WHERE city LIKE 'S' AND gender = N AND flg_pic = N AND flg_hidden = N AND flg_ban = N AND id_user != N ORDER BY id_user DESC LIMIT N,N

и вы должны отдать приоритет тем медленным запросам, которые выполняются наиболее часто и наиболее медленно

...