`
invincibleLiu
  • 浏览: 13018 次
  • 性别: Icon_minigender_1
  • 来自: 加泰罗尼亚
社区版块
存档分类
最新评论

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

阅读更多
且看这道题:table 律师,三个字段 编号姓名年龄,table 案件,三个字段 编号律师状态
请查询年龄大于50而且其代理的案子状态是待审的律师姓名,为了让后面那题还有得答,我写的是
select 姓名 from 律师,案件 where 律师.编号=案件.律师 AND 年龄>50 AND 状态='待审'
;后面那题是优化这条sql语句,根据优化原则,减少表连接后元组个数,把耗性能的投影运算尽可能的往查询树叶子端推就可以了,
select 姓名 from 律师 where 年龄>50 AND 编号 IN(select 律师 from 案件 where 状态='待审')

第一条sql转换成hql很容易,高扩展性我做到了,但是performance却不及第二条,第二条想转换成hql就没那么简单了吧?
曾经有位大神看到我写的项目后说hibernate不一定每个项目都要用,不知道是不是这个意思......
分享到:
评论
13 楼 fangl99 2011-06-17  
seele 写道
select 姓名 from 律师,案件 where 律师.编号=案件.律师 AND 年龄>50 AND 状态='待审'


只能说你写的SQL太少...这样案件如果有多个待审,查出的结果就没意义了...



请解释为何没意义
12 楼 antonia 2011-06-16  
先查询出一个较小的范围再进行表连接
11 楼 ironsabre 2011-06-10  
oracle在做query的时候会用无数优化方法来优化。
比你想的多得多。你只要保证正确性就可以了。
10 楼 seele 2011-06-08  
select 姓名 from 律师,案件 where 律师.编号=案件.律师 AND 年龄>50 AND 状态='待审'


只能说你写的SQL太少...这样案件如果有多个待审,查出的结果就没意义了...
9 楼 totong 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]
8 楼 zlowly 2011-06-03  
还是要看数据库。至少在oracle 8以上CBO前两条sql是一样的计划。
oracle里也没有 in 查询无法用到索引这种说法。
7 楼 alyouge 2011-06-03  
select 姓名 from 律师 a where 年龄>50 AND exists(select 律师 from 案件 b where 状态='待审' and a.编号=b.律师) 

这样应该比使用 in 效率高,貌似 in 查询无法用到索引,在大数据量得情况下,效率很低。
6 楼 fiftysix81 2011-06-03  

根据不同数据库 略有不同

select a.姓名 from 
(select 编号,姓名,年龄 from 律师 where 年龄>50) a,(select distinct(律师) from 案件 where 状态='待审')b where a.编号=b.律师
5 楼 aa87963014 2011-06-02  
我就是比较烦 第二句怎么转hql
4 楼 invincibleLiu 2011-05-25  
<div class="quote_title">ubotutwin 写道</div>
<div class="quote_div">
<p>你这个把复杂查询尽量放入子查询的语句优化策略好像不能通用到所有数据库吧,在oracle数据库里还是要看具体语句的执行计划来确定哪个更优。</p>
</div>
<p>是啊,我就想怎么实现跨数据库和性能的双赢</p>
3 楼 ubotutwin 2011-05-25  
<p>你这个把复杂查询尽量放入子查询的语句优化策略好像不能通用到所有数据库吧,在oracle数据库里还是要看具体语句的执行计划来确定哪个更优。</p>
2 楼 samttsch 2011-05-25  
select 姓名 from 律师,案件 where 年龄>50 AND 律师.编号=案件.律师  AND 状态='待审' 
这样试试

先查询出一个较小的范围再进行表连接 性能应该有所提高
1 楼 iamsk 2011-05-23  
工作中根据情况可能就是反范式的了(很常见),很少见到多表联查,这就要在数据库设计时进行必要的冗余

相关推荐

    数据库系统工程师考试冲刺指导.part5

    要5部分下载完才可解压 软考 数据库系统工程师 好资料

    数据库系统工程师考试冲刺指导.part4

    要5部分下载完才可解压 软考 数据库系统工程师 好资料

    计算机水平考试中级数据库系统工程师2014年上半年上午真题.doc

    【计算机水平考试中级数据库系统工程师2014年上半年上午真题】 本次考试主要涉及计算机系统的基础知识,包括CPU内部结构、数据表示、错误检测与校验、指令执行流程以及存储器组织等方面。以下是对这些知识点的详细...

    软考数据库系统工程师冲刺要点.pdf

    【软考数据库系统工程师冲刺要点】是针对中国计算机技术与软件专业技术资格(水平)考试中的“数据库系统工程师”这一科目的复习重点。该文档涵盖了数据库操作、文件管理、记录处理、索引创建、数据查询与统计等多个...

    数据库系统工程师04-12试题及答案

    文件中包含04-12年数据库系统工程师历年真题及答案,尤其是后两年的,在官网上不发布了,很不容易才找到了。我的考试经验告诉我,最重要的是把历年真题做一遍,并理解透彻。做完真题后可以在百度文库中核对答案,...

    软考中级(数据库系统工程师复习资料)

    于2022.5.28考完数据库,给我感觉就是多刷真题,尤其是近5年真题,刷个3遍以上,问题不大。资料包含:2014-2022真题和解析,王珊的第五版电子书及相应的ppt,由于真题解析我是在淘宝买的,所以收点积分。

    UOS运维工程师考试.doc

    11. 安装完KVM虚拟机后,通过`virsh list`命令可以查看当前正在运行的虚拟机。 12. 为了创建安全的Web主机,可以使用`openssl`命令来生成私钥和证书文件。这有助于实现HTTPS连接,提供网站的安全性。 13. 设置服务...

    测试工程师面试题及答案.pdf

    * 回归测试:验证修改完提交的缺陷或增加了新功能等进行的程序修改后是否导致原有正常功能失效或引起新的bug 11. 软件测试计划的关键 * 明确测试的目标,增强测试计划的实用性 * 坚持“5W”规则,明确内容与过程...

    2021软考数据库工程师复习笔记

    【数据库工程师复习笔记】 在准备软考中级数据库工程师的考试时,了解计算机的硬件基础知识是至关重要的。CPU作为计算机的核心,包含运算器和控制器两大组件。运算器包括ALU(算术逻辑单元),用于处理数据;累加...

    Java工程师考试题复习资料.docx

    - **返回类型**:处理完业务逻辑后,Action类通常返回一个`String`对象,用于指示流程控制组件(如`Result`)进行下一步操作。 ### 8. 实现多线程的方式 - **两种方法**:继承`Thread`类或实现`Runnable`接口。 - ...

    系统架构设计师上午试题.docx

    程序计数器(Program Counter, PC)存储了当前指令的地址,在执行完一条指令后,会自动指向下一个指令的地址。因此,为了从内存中读取指令操作码,首先需要将PC的内容送到地址总线上。 ### 7. 磁盘访问时间计算 - ...

    软件设计师中级2009-2017真题.zip

    3. **掌握知识点**:通过分析历年真题,考生可以发现哪些知识点是常考的,哪些部分可能是考试的重点,从而有针对性地进行复习。 4. **时间管理**:在模拟考试环境下做真题,可以帮助考生熟悉考试的时间分配,提高...

    百度2013校园招聘移动软件研发工程师笔试(北京)

    若数组大小不等,则需确保遍历完较小的数组后再检查较大的数组。 3. 1000桶酒的问题可以通过格雷码编码来解决,利用二进制数的每一位代表一个桶,通过最小数量的小白鼠来检测毒酒。一周后,根据存活和死亡的小白鼠...

    青鸟 ACCP 一期结业 测试题

    青鸟ACCP一期结业测试题是对学员在学习完该阶段课程后进行的一次综合能力检验,旨在评估学员对编程基础、软件工程方法以及特定技术领域的掌握程度。ACCP(Advanced Computer Career Program)是由北大青鸟推出的...

    大数据试题及复习资料.docx

    蒂姆·伯纳斯-李是英国计算机科学家和工程师,发明了万维网,并推动了互联网的发展。 19. Mac OS系统的开发者是苹果公司(C)。苹果公司是美国著名的科技企业,开发了多种成功的产品,包括Mac OS操作系统、iPhone...

    04到09年全国软考真题及部分答案

    此外,做完题目后,对照答案进行自我评估也是必不可少的步骤,这可以帮助考生理解出题者的意图,掌握正确的解题思路。如果可能的话,结合参考解析进行深入学习,将有助于考生更好地理解和消化知识点。 总之,这个...

    2010离散数学期末考试试卷(A)[参照].pdf

    - 哈密尔顿图与欧拉图:第8题要求识别既是哈密尔顿图(每个顶点恰有一条进入和一条离开的边)也是欧拉图(图可以一笔画完)的图形。 5. **代数结构**: - 子群:第10题涉及到群论中的子群定义,要求识别哪个代数...

    计算机应用基础windows7+office2010计算机基础知识.pptx

    考核内容包括计算机语言与基础程序设计能力,要求参试者掌握一门计算机语言,可选类别有高级语言程序设计类、数据库程序设计类、WEB程序设计类等;二级还包括办公软件高级应用能力,要求参试者具有计算机应用知识及...

Global site tag (gtag.js) - Google Analytics