【问题标题】:Streaming join multiple resultSet流式连接多个结果集
【发布时间】:2019-03-11 03:37:00
【问题描述】:

我的sql性能有问题,我的db行太多,所以查询时间很长。

SELECT * FROM A JOIN B ON A.id = B.id where ...

所以我改成

SELECT * FROM A where A= a...
SELECT * FROM B where B= b...

我从这里的 2 个查询中得到了 2 个结果集。 有人可以帮助我如何以最佳性能加入 2 个结果集。 我必须拆分为 2 个查询,因为这个数据库有 1000 万条记录。

【问题讨论】:

  • 您不可能编写比数据库中的连接实现更好的连接。
  • 如果您需要帮助调整 SQL 查询,您应该在 dba.stackexchange.com 上提问,在那里您可以在 Advanced Querying including window-functions, dynamic-sql, and query-performance 上提问。
  • 我可以将 2 个结果集解析为 hashmap 并用 key 连接,O(n) 将是 2n,比 join sql n^2 更好
  • SQL 引擎可以进行散列连接、合并连接、嵌套循环连接等,而且它们可能也得到了更好的优化。您所需要的只是调整 SQL 的能力。
  • 我用的是mysql,据我所知,mysql不支持hash join :(

标签: java sql resultset


【解决方案1】:
Select col1, col2 ...
from 
    ( 
    -- first query
    ) as tab1 
join 
    (
    -- second query
    ) as tab2 on tab1.colx = tab2.coly

【讨论】:

  • 为什么会有不同?
  • 我不认为它会带来巨大的性能提升,但是当我们加入小马厩时,我认为它可能会带来更好的性能。因为这里我们使用where子句在每个表中分别执行查询以选择唯一相关的行,然后执行连接。这比先连接所有行并使用 where 子句将其过滤掉要好。如果我错了,请纠正我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多