Как я могу сохранить подобные запросы в mysql_slow.log?

У меня есть следующий запрос, мне нужна помощь.

SELECT a.artist, a.facepic
FROM artists_vs AS v, artists AS a 
WHERE v.genreid =0 
AND (v.artistid1 = a.artistid OR v.artistid2 = a.artistid)
ORDER BY v.bid DESC 
LIMIT 20

Все поля в запросе проиндексированы, но когда я запускаю объяснение, я получаю следующее:

1   SIMPLE  v   ref genreid,artistid1,artistid2 genreid 4   const   15  Using temporary; Using filesort
1   SIMPLE  a   ALL PRIMARY NULL    NULL    NULL    18165   Range checked for each record (index map: 0x1)

Мне нужно, чтобы в my.cnf были включены журналы запросов-не-использования-индексов

Кто-нибудь может подсказать, как я мог бы переписать этот запрос, чтобы он не попал в медленный журнал?

1 ответ

Решение

Вы можете попробовать что-то вроде этого:

SELECT 
    a.artist, 
    a.facepic,
    V.bid
FROM artists_vs AS v
inner join artists as a on v.artistid1 = a.artistid
WHERE v.genreid = 0 
union
SELECT 
    a.artist, 
    a.facepic,
    v.bid
FROM artists_vs AS v
inner join artists as a on v.artistid2 = a.artistid
WHERE v.genreid = 0 
ORDER BY bid DESC 
LIMIT 20
Другие вопросы по тегам