首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql联合的问题

问mysql联合的问题
EN

Stack Overflow用户
提问于 2012-06-14 18:49:46
回答 1查看 87关注 0票数 0

我在优化一些非常慢的查询时遇到了一些麻烦(包括技术上和概念上的)。

这是我最初的查询:

代码语言:javascript
复制
select Con_Progr,
    Pre_Progr
from contribuente,
    preavviso_ru,
    comune,
    via
where [lots of where clauses]
    and ((Via_Progr = Con_Via_Sec) or (Via_Progr = Con_Via_Res and (Con_Via_Sec is null or Con_Via_Sec = '0')))
order by Con_Cognome,
    Con_Nome asc;

这个查询大约需要38秒来执行,这是一个非常慢的时间。我对它进行了一些处理,并设法加快到大约0.1秒,现在查询看起来像这样:

代码语言:javascript
复制
(select Con_Progr,
    Pre_Progr
from preavviso_ru
    join contribuente
        on Pre_Contribuente = Con_Progr
    join via
        on Via_Progr = Con_Via_Sec
    join comune
        on Via_Comune = Com_CC
where [lots of where clauses]
order by Con_Cognome,
    Con_Nome asc
)
union
(
select Con_Progr,
    Pre_Progr
from preavviso_ru
    join contribuente
        on Pre_Contribuente = Con_Progr
    join via
        on Via_Progr = Con_Via_Res
    join comune
        on Via_Comune = Com_CC
where [lots of where clauses]
    and (Con_Via_Sec is null or Con_Via_Sec = '0')
order by Con_Cognome,
    Con_Nome asc
)

如您所见,我在原始查询中拆分了where子句,该查询在两个不同的子查询中使用了OR操作符,然后将它们合并。这解决了速度问题。但结果并不完美,因为我丢失了排序。我尝试选择子查询中的列,然后对结果执行排序,如下所示:

代码语言:javascript
复制
select Con_Progr,
        Pre_Progr
from (
    [FIRST SUBQUERY]
) as T1 union (
    [SECOND SUBQUERY]
) as T2
order by Con_Cognome,
        Con_Nome asc

但是我在'union‘附近得到了一个语法错误。有什么建议吗?

这是一个技术问题。现在从概念上来说,我认为这两个子查询非常相似(它们只有一个join子句和一个where子句不同),有没有办法以一种更优雅的方式重新排列第二个查询(快速查询)?

EN

回答 1

Stack Overflow用户

发布于 2012-06-15 15:14:34

我解决了技术问题,我把括号放错了地方:

代码语言:javascript
复制
select Con_Progr,
    Pre_Progr
from (
    [FIRST SUBQUERY]
union
    [SECOND SUBQUERY]
) as T
order by Con_Cognome,
    Con_Nome asc

现在它几乎完美地工作了(在排序上仍然有一些差异,但这不是问题。

关于查询的效率,我发现问题出在两个不同列上的OR条件上,因为MySQL 4.0 (我用它来解决向后兼容性问题)只允许表有一个索引。但是,为什么它不使用这些索引中的至少一个。我再测试一下...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11031513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档