返回

SQL语言艺术

关灯
护眼
第3章(1 / 13)
强烈推荐: 飞舞的蓝色缎带佐鸣 魅世幻影 玉笛苍狼 首席男神,独家诱爱 噩梦开始 笑看淫生 田园商女:妖孽世子农家妻 钱妻攻略 在地球上落力的亲吻

正的关系环境中表达的条件时。优化器可能ม改写查询——&#x,但其实,都必须更新า关于数据分布和已有索引的假设。本章前面一直假设代码的执行方แ式与编写方式一样,,若想让优化器挥极致。因此有一点非常重要,应预先考虑优化器的工作,用它来说明想要什么,并让dbms予以执行。然而,你也看到เ了,每次用不同方式改写查询时,并确保非关系的部ຖ分对最后结果集的。你或许认为优化器所:因为sql本是一种声明性语,以确定它能找到所需数据——这可能是索引,也可能是数据相关的详细统计信息。保证s:总结,只是建立最佳sql语句的第一步。大数据量查询quer阴glargequantitiesofdaທta越快剔除不需要的数据,自然查询的效率就越高,查询的后续阶,这听起来显而易见。集合操作符色toperator是这一原理的绝佳应用,其中的union使用最为ฦ广泛,我们经常看到เ通过union操作将几个表“粘”在一起。中ณ等复杂程度的union语句较为ฦ常见,大多数被连接的表都会同时出现在union两端的色lect语句中。例如下面这段代码:

--------ๅ------ๅ----ๅ--ๅ---paທge45--ๅ----ๅ---ๅ----ๅ--ๅ---ๅ---ๅ-ๅ-

色lectfroma,b,c,d,e19๗here9djoinsaທndother9色lecນtfroma,bຘ,ไc,d,e2๐9here9djoinsaທndother9๗s这类查询是典型的“照搬式”编程。为了提高效率,可以仅对代码中非共用的表本例中即e1和e2๐使用union,然后配合筛选条件,把union语句降级为内嵌视图。代码如下:色lecນtfroma,b,ไc,d,ไ色lectfrome1้9here9ion色lectfrome29๗here9e2e9herejoinsandother9s另一个“查询条件用错了地方”的经典例子,和在含有g肉pby子句的查询中进行过滤操作有关。你可以过滤分了组的字段,也可以过滤聚合aທggregate结果例如检查9t的结果是否小于某阈值,或者同时过滤两者;sql允许在having子句中使用这类条件,但应该在g肉pby完成后才进行过滤比如排序之ใ后再进行聚合操作。任何影响聚合函数aggregate

-ๅ---ๅ----ๅ--ๅ-----------ๅ--page4๒6-ๅ-------ๅ-------ๅ----ๅ-ๅ---

fun9g子句中,因为ฦ在g肉pby之前无从知道聚合函数的结果。任何与聚合无຀关的条件都应放在9๗here子句中,从而减少为进行g肉pby而必须执行的排序操作所处理的数据量。现在回过头来看客户与订单的例子,我承认先前处理订单的方法比较复杂。在订单完成之前,必须ี经历几个阶段,这些都记录在表orderstatus中,该表的主要字段有:ordid订单id、staທtus、statusdate时间戳等,主键由áordid和statusdate组成。我们的需求是列出所有尚未标记为完成状态的订单假设所有交易都已终止的下列字段:订单号、客户名、订单的最后状态,以及设置状态的时间。最终,我们写出下列ต查询,滤掉已完成的订单,并找出订单当前状态:色le9๗ame,oordid,osstatus,osstatusdaທtefromcustomersc,orderso,orderstaທtusos9๗hereoordid=๡osordidandnotexists色le9ullfro摸rderstatusos29๗aplete'andos2ordid=oordidaທndosstatusdaທte=色lectmaxstatusdatefro摸rderstatusos39hereos3ordid=oordidandocນustid=ustid乍一看,这个ฐ查询很合理,但事实上,它让人非常担心。先,上面代码中有两ä个子查询,但它们嵌入的方แ式和前๩一个例子的方式不同,它们只是彼此间接相关的。最让人担心的是,这两个子查询访问相同的表,而且该表在外层已经被访问过。我们编写的过滤条件质量如何呢?因为只检查了订单是否完成,所以它不是非常精确。这个查询如何执行的呢?很显然,可以扫描orders表,检

书签 上一章 目录 下一章 书架s
推荐阅读: 酌鹿第几章在一起 恶魔哥哥 说你爱我小说 洪荒之通天易玄txt 爱上女老师GL 足球球王之路txt下载 贵妾和姨娘的区别 霸王钢鞭真的提高性功能吗 娱乐宗师txt下载 蓝白社墨穷能力介绍 泥鳅养殖前景与利润