Почему не используется составной индекс?

Тема в разделе "Базы данных", создана пользователем yeaahhh, 18 мар 2015.

Модераторы: latteo
  1. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Друзья, всем привет.
    Изучаю тему оптимизации mysql, в частности работу с индексами..
    Подскажите, плз:
    2 поля:
    date - datetime
    kreads - int(11)
    есть такой запрос:
    Код:
    SELECT `id`, `date`, `title`, `kreads` FROM таблица WHERE date < '".$nowdate."' ORDER by `kreads` DESC LIMIT 8
    
    создал такой индекс:
    Код:
    CREATE INDEX date_kreads ON таблица(date, kreads);
    
    Вот что выдает через EXPLANE:
    Код:
    id select_type table type possible_keys key key_len ref rows Extra
    1 SIMPLE таблица ALL date_kreads,date NULL NULL NULL 102 Using where; Using filesort
    
    Можно ли как-то заставить использовать индекс?
    Заранее спасибо за помощь..
     
  2. BaBL

    BaBL Постоялец

    Регистр.:
    13 ноя 2012
    Сообщения:
    148
    Симпатии:
    91
    Потому что фильтруешь ты по одному полю, а индекс хочешь составной использовать. То что у тебя в запросе оба поля - не спасает, та как ORDER работает уже после SELECT, а WHERE идет сразу после FROM / JOIN операций.

    Можешь попробовать добавить FORCE INDEX, но думаю mysql его все равно проигнорирует. Так что создавай отдельно индекс на date.
     
    latteo и yeaahhh нравится это.