2016-03-02 5 views
0
LEFT JOIN (SELECT xx_coinType AS yy_type, xx_sell AS sell_xx 
      FROM xxs 
      ORDER BY xx_id DESC) AS xxs 
       ON xxs.yy_type = zz.zz_coin 
LEFT JOIN (SELECT xx_coinType AS yy_type, xx_sell AS old_sell_xx 
      FROM xxs 
      WHERE xx_time < UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 24 HOUR)) 
      ORDER BY xx_id DESC) AS old_xxs 
       ON old_xxs.coin_type = zz.zz_coin 

Итак, у меня есть 2 левых соединения в моем запросе, которые выбирают из той же таблицы, но где-то на одном. Поскольку его та же таблица, которую я выбираю из запроса, очень медленная. Как я могу это исправить?left join the same table дважды медленный запрос

+0

«так как его та же таблица я выбираю из запроса супер медленно» - я не знаю, что «присоединение к той же таблицы «и« запрос слишком медленный »имеет отношение друг к другу - может быть, у вас нет индекса на столбцах объединения? – Smutje

+1

'ORDER BY' в производных таблицах'? Weird ... – dnoeth

+0

Вы можете применить CTE к таблице, к которой вы присоединяетесь, и присоединиться к CTE. –

ответ

1

Во-первых, нет необходимости использовать предложение order by в производных таблицах.
Во-вторых, ваша первая производная таблица просто выбирает все записи в таблице, поэтому я не вижу смысла в ней.

Попробуйте это:

LEFT JOIN xxs 
       ON xxs.yy_type = zz.zz_coin 
LEFT JOIN (SELECT xx_coinType AS yy_type, xx_sell AS old_sell_xx 
      FROM xxs 
      WHERE xx_time < UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 24 HOUR)) 
      ) AS old_xxs 
       ON old_xxs.coin_type = zz.zz_coin 

Или это:

LEFT JOIN (SELECT xx_coinType AS yy_type, xx_sell AS sell_xx 
      FROM xxs 
      WHERE xx_time >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 24 
      ) AS xxs 
       ON xxs.yy_type = zz.zz_coin 
LEFT JOIN (SELECT xx_coinType AS yy_type, xx_sell AS old_sell_xx 
      FROM xxs 
      WHERE xx_time < UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 24 HOUR)) 
      ) AS old_xxs 
       ON old_xxs.coin_type = zz.zz_coin 
Смежные вопросы