CodeByZen
@CodeByZen
php, js, my/mssql, sqlite, html, css, it-consult

Как оптимизировать SQL запрос с LEFT JOIN?

Есть база sqlite и две таблички
в первой (requests) всякие данные (около 26000)
во второй (requestrewards) requestid и число (примерно 125000 записей)
надо выбрать пять самых больших requests по сумме из requestrewards

Код ниже делает это более чем за 1 секунду
SELECT SUM(value) as `total`, requestid, R.*, R.rowid as id
FROM `requestrewards`
LEFT JOIN `requests` as R ON R.rowid = requestrewards.requestid
GROUP BY `requestid` ORDER BY `total` DESC LIMIT 5


Очень хочется оптимизировать, т.к. нужны реальные данные. Кеш не подойдет.
  • Вопрос задан
  • 4796 просмотров
Решения вопроса 1
@Geckelberryfinn
А индексы пробовали создать на колонках по которым делаете left outer join ?
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@PCHELA_MATKA
Добрый день!

А если попробовать в начале получить сгруппировать 2 таблицу, тем самым получить сумму(как я понимаю requestid не уникальный идентификатор). После выбрать top 5 из получившегося запроса и соединить с первой таблицы.
Ответ написан
@svd71_1
попробуйте так:
select total, requestid, R.*, R.rowid as id
from 
(
select sum(value), requestid from requestrewards
group by requestid
order by total
) as rr
LEFT JOIN `requests` as R ON R.rowid =rr.requestid

хотя проблема в R.*. Вам точно все поля из той таблицы нужны?
Ответ написан
CodeByZen
@CodeByZen Автор вопроса
php, js, my/mssql, sqlite, html, css, it-consult
Пока решил проблему триггером на запись. Но это не выход а костыль.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы