Полагаю, что все комментаторы означали, что ваш запрос, вероятно, должен быть:
SELECT
(SELECT COUNT(*) FROM votes WHERE link = <linkid> AND vote = 1 ) AS upvotes,
(SELECT COUNT(*) FROM votes WHERE link = <linkid> AND vote = -1) AS downvotes
К настоящему времени у вас есть как минимум 4 других способа, которые делают то же самое, что и этот (3 способа точно так же и 1 способ слегкаразные, дают одинаковые результаты, но в 2 ряда).Протестируйте свои данные и выберите более быстрый (или оставьте их все и повторите тест позже, когда таблица станет больше).
Составной индекс на (link,vote)
также будет полезен для всех версий.