Vincent1
@Vincent1

Оптимизация sql запроса?

SELECT A.name, B.phone, %еще 20 полей%... 
FROM  `alpha` d
LEFT OUTER JOIN beta B ON A.name= B.name
WHERE A.age > 20 LIMIT 5000, 3000

Данный запрос не выполняется из-превышения каких-то лимитов хостинга.
Если offset в LIMIT указать =0, то данные будут получены. Но если offset=5000, то уже не работает.
Насколько я понимаю движок все равно перелопачивает эти 5000 строк не смотря на то что в выводе их быть не должно.
Как оптимизировать запрос, чтобы можно было получать данные с любым offset ?
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
Vincent1
@Vincent1 Автор вопроса
Решил проблему с использованием подзапросов.
SELECT A.name, B.phone, %еще 20 полей%... 
FROM  
	(SELECT * FROM `alpha` A.age > 20 LIMIT 5000, 5000) AS A
LEFT OUTER JOIN beta B ON A.name= B.name

Большое спасибо всем за помощь.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
EXPLAIN SELECT A.name, B.phone, %еще 20 полей%... 
FROM  `alpha` d
LEFT OUTER JOIN beta B ON A.name= B.name
WHERE A.age > 20 LIMIT 5000, 3000
Ответ написан
kawabanga
@kawabanga
про explain правильно говорят.

А почему вам связывать таблицы без ключа необходимо? попробуйте добавить индексы на a.name b.name
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы