This query is getting the newest videos uploaded by the user’s subscriptions, its running very slow so I rewrote it to use joins but It didn’t make a difference and after tinkering with it I found out that removing ORDER BY would make it run fast (however it defeats the purpose of the query).
Query:
SELECT vid. *
FROM video AS vid
INNER JOIN subscriptions AS sub ON vid.uploader = sub.subscription_id
WHERE sub.subscriber_id = '1'
AND vid.privacy = 0 AND vid.blocked <> 1 AND vid.converted = 1
ORDER BY vid.id DESC
LIMIT 8
Running explain, it would show “Using temporary; Using filesort” in subscriptions table and its slow (0.0900 seconds).
Without ORDER BY vid.id DESC it doesn’t show “Using temporary; Using filesort” so its fast (0.0004 seconds) but I don’t understand how the other table can affect it like this.
All the fields are indexed (privacy blocked and converted fields don’t affect performance by more than 10%).
I would paste the full explain information but I can’t seem to make it fit nice in the layout of this site.
Fixed it by suggesting that mysql use the primary index with USE_INDEX(PRIMARY)