Я не гуру MySQL (или что-то еще!), Но некоторые вещи я бы рассмотрел. Во-первых, равномерно ли распределен b33? Может быть, это медленнее, потому что эффективно извлекает больше строк?
Во-вторых, рассматриваете ли вы сделать всю работу в одном запросе вместо 13500? Что-то вроде:
select A.*, b2, b5, b7, b8, b10, b13, b33, (b33 - 1 DIV 1000) the_group
from A join B on a1=b1
В-третьих, дикая догадка, если ваша версия MySQL поддерживает это, сначала используйте фильтрацию inlinew, чтобы выполнить фильтрацию:
select A.*, b2, b5, b7, b8, b10, b13, b33
from A join (select b1,b2, b5, b7, b8, b10, b13, b33
from B b33 >= pos and b33 < pos+1000) B_NEW
on a1=b1 ;
В-четвертых (должен быть первым), составьте план объяснения и попытайтесь выяснить, почему запрос медленный, сравнивая быстрые запросы с медленными.
Удачи !!