论坛首页 综合技术论坛

数据库系统工程师考完后突然发现......

浏览 9743 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2011-05-23   最后修改:2011-05-24
且看这道题:table 律师,三个字段 编号姓名年龄,table 案件,三个字段 编号律师状态
请查询年龄大于50而且其代理的案子状态是待审的律师姓名,为了让后面那题还有得答,我写的是
select 姓名 from 律师,案件 where 律师.编号=案件.律师 AND 年龄>50 AND 状态='待审'
;后面那题是优化这条sql语句,根据优化原则,减少表连接后元组个数,把耗性能的投影运算尽可能的往查询树叶子端推就可以了,
select 姓名 from 律师 where 年龄>50 AND 编号 IN(select 律师 from 案件 where 状态='待审')

第一条sql转换成hql很容易,高扩展性我做到了,但是performance却不及第二条,第二条想转换成hql就没那么简单了吧?
曾经有位大神看到我写的项目后说hibernate不一定每个项目都要用,不知道是不是这个意思......
   发表时间:2011-05-23  
工作中根据情况可能就是反范式的了(很常见),很少见到多表联查,这就要在数据库设计时进行必要的冗余
0 请登录后投票
   发表时间:2011-05-25  
select 姓名 from 律师,案件 where 年龄>50 AND 律师.编号=案件.律师  AND 状态='待审' 
这样试试

先查询出一个较小的范围再进行表连接 性能应该有所提高
0 请登录后投票
   发表时间:2011-05-25  

你这个把复杂查询尽量放入子查询的语句优化策略好像不能通用到所有数据库吧,在oracle数据库里还是要看具体语句的执行计划来确定哪个更优。

0 请登录后投票
   发表时间:2011-05-25  
ubotutwin 写道

你这个把复杂查询尽量放入子查询的语句优化策略好像不能通用到所有数据库吧,在oracle数据库里还是要看具体语句的执行计划来确定哪个更优。

是啊,我就想怎么实现跨数据库和性能的双赢

0 请登录后投票
   发表时间:2011-06-02  
我就是比较烦 第二句怎么转hql
0 请登录后投票
   发表时间:2011-06-03   最后修改:2011-06-03

根据不同数据库 略有不同

select a.姓名 from 
(select 编号,姓名,年龄 from 律师 where 年龄>50) a,(select distinct(律师) from 案件 where 状态='待审')b where a.编号=b.律师
0 请登录后投票
   发表时间:2011-06-03   最后修改:2011-06-03
select 姓名 from 律师 a where 年龄>50 AND exists(select 律师 from 案件 b where 状态='待审' and a.编号=b.律师) 

这样应该比使用 in 效率高,貌似 in 查询无法用到索引,在大数据量得情况下,效率很低。
0 请登录后投票
   发表时间:2011-06-03  
还是要看数据库。至少在oracle 8以上CBO前两条sql是一样的计划。
oracle里也没有 in 查询无法用到索引这种说法。
0 请登录后投票
   发表时间:2011-06-07   最后修改:2011-06-07
from Lawyer l where l.age>50 and l.id in(select distinct c.id from LawCase c where c.status='待审')

show_sql出来的代码是
    select
        lawyer0_.ID as ID0_,
        lawyer0_.NAME as NAME0_,
        lawyer0_.AGE as AGE0_
    from
        SCOTT.LAWYER lawyer0_
    where
        lawyer0_.AGE>50
        and (
            lawyer0_.ID in (
                select
                    distinct lawcase1_.ID
                from
                    SCOTT.LAW_CASE lawcase1_
                where
                    lawcase1_.STATUS='待审'
            )
        )
[com.hope.entity.Lawyer@90c06f]
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics