powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос
5 сообщений из 5, страница 1 из 1
Помогите оптимизировать запрос
    #38659963
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно оптимизировать "(SELECT r.`rate` FROM `rate` r WHERE r.`currency` = result_without_conversion.`currency` ORDER BY r.`time` DESC LIMIT 1)", что эта часть не повторялась (проблема ли это для оптимизатора)?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
SELECT 
result_without_conversion.user_id,
result_without_conversion.email,
result_without_conversion.balance * (SELECT r.`rate` FROM `rate` r WHERE r.`currency` = result_without_conversion.`currency` ORDER BY r.`time` DESC LIMIT 1) balance,
result_without_conversion.latest_login_time,
result_without_conversion.trades_done,
result_without_conversion.total_deposited * (SELECT r.`rate` FROM `rate` r WHERE r.`currency` = result_without_conversion.`currency` ORDER BY r.`time` DESC LIMIT 1) total_deposited,
result_without_conversion.total_withdrawal * (SELECT r.`rate` FROM `rate` r WHERE r.`currency` = result_without_conversion.`currency` ORDER BY r.`time` DESC LIMIT 1) total_withdrawal,
result_without_conversion.open_trades_volume * (SELECT r.`rate` FROM `rate` r WHERE r.`currency` = result_without_conversion.`currency` ORDER BY r.`time` DESC LIMIT 1) open_trades_volume

FROM (
        SELECT 
                usr.`id` user_id, 
                usr.`email` email, 
                IFNULL(usr.`name`, '') name, 
				acc.`currency` currency, 
                acc.`cash` balance, 
                usr.`last_login` latest_login_time, 
                (1000 * UNIX_TIMESTAMP() - usr.`last_login`) duration_latest_session, 
                COUNT(CASE WHEN ord.`open_time` > usr.`last_login` THEN 1 ELSE NULL END) trades_done, 
                (SELECT COALESCE(SUM(CASE WHEN pmt.`sum` > 0 THEN pmt.`sum` ELSE 0 END), 0) FROM `payment` pmt WHERE pmt.`account_id` = acc.`id`) total_deposited, 
                ABS((SELECT COALESCE(SUM(CASE WHEN pmt.`sum` < 0 THEN pmt.`sum` ELSE 0 END), 0) FROM `payment` pmt WHERE pmt.`account_id` = acc.`id`)) total_withdrawal, 
                SUM(CASE WHEN ord.`status` = 'PENDING' AND ord.`open_time` > usr.`last_login` THEN ord.`quantity` ELSE 0 END) open_trades_volume 
                    FROM `user` usr 
                        JOIN `account` acc ON usr.`account_id` = acc.`id` 
                        LEFT JOIN `order` ord ON acc.`id` = ord.`account_id` 
                    WHERE usr.`id` IN (2001004,2001025,2001166) 
                         AND acc.`broker_id` = 1
                         AND acc.`type` = 'REAL' 
                GROUP BY acc.`id`) result_without_conversion;
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38659994
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_chaos_,

вынеси во временную таблицу
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38659999
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SharuPoNemnogu,

В смысле? Каким образом я могу вынести одновременно в таблицу временную и сделать query (там же есть зависимость по currency)?
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38660029
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_chaos_,

Код: sql
1.
2.
3.
select a*(@k:=(select k from limit 1))
  ,b*@k, c*@k...
from...
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38660037
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007,

О, оно. Спасибо!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]