如何在mysql中使用同一个表连接进行优化?

1cklez4t  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(324)

我有这个table结构:table
我需要找到一个明显的符号,其中id\u交换是1和7。我有一个带有子查询的查询:

SELECT DISTINCT symbol
FROM ohlcv 
WHERE 
    id_exchange=1 
    AND quote_currency='USDT' 
    AND symbol IN (SELECT DISTINCT symbol FROM ohlcv WHERE id_exchange=7 AND quote_currency='USDT');

它能找到所需的数据,但速度很慢。有没有办法优化它,也许用同一个表做一个内部连接?
谢谢!

  • 我不知道那个计数(符号)在那里做什么,它是´我只是看到了那个错误。我可能做了一些测试,但复制了错误的。请原谅我的错误(
  • 索引结构*显示来自ohlcv的索引
xkftehaa

xkftehaa1#

在优化现有查询的基础上,可以执行自联接,并将条件放在on子句中,而不是子查询中:

SELECT DISTINCT t1.symbol 
FROM ohlcv AS t1
INNER JOIN ohlcv AS t2 ON t2.id_exchange = 7 
WHERE 
    t1.id_exchange = 1 
    AND t1.quote_currency = 'USDT' 
    AND t2.quote_currency = 'USDT' 
    AND t1.symbol = t2.symbol
iq3niunx

iq3niunx2#

从你的问题,似乎你需要不同的内部计数,因为它会给你不同的符号计数。

SELECT count(DISTINCT symbol)
FROM ohlcv
WHERE id_exchange IN (1,7)
  AND quote_currency='USDT'

相关问题