MySQL联合所有性能调整

MySQL联合所有性能调整,mysql,query-optimization,union-all,Mysql,Query Optimization,Union All,为什么UNION ALL工作缓慢 使用UNION ALL?的任何其他替代方法是否已打开?这可能是由于从QC获取结果集,两个单独的选择人为快速 让我们剖析一下联合体,了解它的惰性: 为结果集创建临时表 首先执行选择,将结果写入该温度 执行第二次选择,将结果写入该温度 阅读临时表格 (重复数据消除。自从您在UNION上说ALL后,就没有发生这种情况) 将结果交付给客户 放下临时表 有两件事可能使情况恶化: Windows在构建表时比*NIX慢 直到MySQL的最新版本,一些联合才能避免临时表。也就

为什么
UNION ALL
工作缓慢

使用
UNION ALL

的任何其他替代方法是否已打开?这可能是由于从QC获取结果集,两个单独的
选择
人为快速

让我们剖析一下
联合体
,了解它的惰性:

  • 为结果集创建临时表
  • 首先执行
    选择
    ,将结果写入该温度
  • 执行第二次
    选择
    ,将结果写入该温度
  • 阅读临时表格
  • (重复数据消除。自从您在
    UNION
    上说
    ALL
    后,就没有发生这种情况)
  • 将结果交付给客户
  • 放下临时表
  • 有两件事可能使情况恶化:

    • Windows在构建表时比*NIX慢
    • 直到MySQL的最新版本,一些
      联合才能避免临时表。也就是说,在将来,每个
      SELECT
      的结果都可以直接交付给客户机。你显然没有这样的版本
    至于括号,请保持打开状态。把它们放在另一个
    上,也选择
    。它不会影响性能,但可能会影响结果。例如,想象一下在这三种情况下,
    groupby
    适用于什么:

    SELECT `col1` FROM `tbl1`;   -- takes 0.0022s
    
    SELECT `col1` FROM `tbl2`;   -- takes 0.0017s
    
    SELECT `col1` FROM `tbl1`
    UNION ALL 
    (SELECT `col1` FROM `tbl2`); -- takes 0.1100s
    

    第一个与第二个相同,而不是第三个。

    为您的查询提供
    解释
    计划避免在第二个周围使用()select@scaisEdge没关系,移除后返回相同的输出成本相同time@MKhalidJunaid你能详细说明一下吗?我曾经使用explain-sql,但我想知道为什么union都会减慢两个sql的速度,@MD.KamruzZamanRana要知道原因,首先需要了解一下
    
    -- Case 1
    SELECT ..     UNION SELECT ..   GROUP BY ..
    
    -- Case 2
    SELECT ..     UNION ( SELECT ..   GROUP BY .. )
    
    -- Case 3
    ( SELECT .. ) UNION ( SELECT .. ) GROUP BY ..