Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос / 5 сообщений из 5, страница 1 из 1
03.06.2014, 13:18:34
    #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
03.06.2014, 13:31:05
    #38659994
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
_chaos_,

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

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

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

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


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