2017-02-05 6 views
0

Пусть мой запрос:Сопроводительное индекс в MySQL для присоединиться + где запросов

SELECT adstable.adid FROM `adstable` 
inner join userstable on 
(adstable.adid = userstable.adid) 
WHERE adstable.desktopimp > 100 
and adstable.mobileimp > 100 
and adstable.userbal > 0.02 
and adstable.realbal> 0.02 
order by adstable.imptotal asc 

Какие столбцы я должен индексировать, чтобы обеспечить «индекс покрытия» для этого запроса?

+1

http://stackoverflow.com/questions/6747359/do-indexes-speed-up-greater-than-comparison-in-mysql –

+0

tf ............. –

ответ

0

Может ли быть более одного «пользователя» на «объявление»? Может ли быть нуль? Если ни один, то

SELECT a.adid 
    FROM `adstable` AS a 
    WHERE a.desktopimp > 100 
     and a.mobileimp > 100 
     and a.userbal > 0.02 
     and a.realbal> 0.02 
     AND EXISTS (
     SELECT * 
      FROM userstable 
      WHERE adid = a.adid 
       ) 
    order by a.imptotal asc 

ли или нет, что это лучший препарат, не имеют эти показатели:

userstable: INDEX(adid) 
adstable: INDEX(imptotal) -- in case it is better to avoid the sort 
      INDEX(desktopimp) -- in case it is most selective 
      INDEX(mobileimp) 
      INDEX(userbal) 
      INDEX(realbal) 

А «покрытие» индекс будет включать в себя все 6 колонок adstable, которые используются в запросе. Это довольно громоздко и с сомнительным использованием.

Просьба SHOW CREATE TABLE - это может быть полезно увидеть Datatypes, двигатель и т.д.

При построении оптимального индекса, начните с любыми столбцами по сравнению с =. Если это позаботится обо всех WHERE, перейдите к столбцам ORDER BY. У вас нет этого случая, так как вы не используете =.

Смежные вопросы