首页 > 解决方案 > 如何在mysql中使用同一个表连接进行优化?

问题描述

我有这个表结构:

我需要找到 id_exchange 为 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');

它会找到所需的数据,但速度很慢。有没有办法优化它,也许对同一张表进行内部连接?

谢谢!

* 更新 * 我不知道那个 count(symbol) 在那里做了什么,它不是原始查询的一部分,我只是看到了那个错误。我可能一直在做一些测试并复制了错误的。请原谅我的错误。:(

* INDEX 结构 * 显示来自 ohlcv 的索引

标签: mysqlself-join

解决方案


在优化现有查询的基础上,您可以进行自联接并将条件放在 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

推荐阅读