
基于集合和法度榜样的办法进行萌芽
经由过程创建索引,萌芽优化器已经决定了索引扫描时,若何查找 Merge join。
反向模型中隐含的事实是,建立萌芽时基于集合和法度榜样的办法之存放在着不合。
- 萌芽的法度榜样办法是一种异常类似于编程的办法:你告诉体系须要做些什么以及若何做。例如上一篇文┞仿中的示例,经由过程履行一个函数然后调用另一个函数来萌芽数据库,或者应用包含轮回、前提和用户定义函数(UDF)的逻辑方法来获得最终萌芽结不雅。你会发明经由过程这种方法,一向在请求一层一层中数据的子集。这种办法也经常被称为慢慢或逐行萌芽。
- 另一种是基于集合的办法,只需指定须要履行的操作。应用这种办法要做的工作就是,指定你想经由过程萌芽获得的结不雅的前提和请求。在检索数据过程中,你不须要存眷实现萌芽的内部机制:数据库引擎会决定最佳的履行萌芽的算法和逻辑。
因为 SQL 是基于集合的,所以这种办法比起法度榜样办法加倍有效,这也说清楚明了为什么在某些情况下,SQL 可以比代码工作地更快。
基于集合的萌芽办法也是数据发掘分析行业请求你必须控制的技能!因为你须要闇练的在这两种办法之间进行切换。如不雅你发明本身的萌芽中存在法度榜样萌芽,则应当推敲是否须要重写这部分。
大年夜萌芽到履行筹划
反向模式不是静止不变的。在你成为 SQL 开辟者的过程中,避免萌芽反向模型和重写萌芽可能会是一个很艰苦的义务。所以时常须要应用对象以一种加倍构造化的办法来竽暌古化你的萌芽。
对机能的思虑不仅须要更构造化的办法,还须要更深刻的办法。
然而,这种构造化和深刻的办法主如果基于萌芽筹划的。萌芽筹划起首被解析为“解析树”并且准肯定义了每个操作应用什么算法以及若何调和操作过程。
萌芽优化
在优化萌芽时,很可能须要手动检查优化器生成的筹划。在这种情况下,将须要经由过程查看萌芽筹划来再次分析你的萌芽。
要控制如许的萌芽筹划,你须要应用一些数据库治理体系供给给你的对象。你可以应用以下的一些对象:
- 一些软件包功能对象可以生成萌芽筹划的图形表示。
- 其它对象可以或许为你供给萌芽筹划的文本描述。
请留意,如不雅你正在应用 PostgreSQL,则可以区分不合的 EXPLAIN,你只需获取描述,解释 planner 如安在不运行筹划的情况下履行萌芽。同时 EXPLAIN ANALYZE 会履行萌芽,并返回给你一个评估萌芽筹划与实际萌芽筹划的分析申报。一般来说,实际履行筹划会切实的履行这个筹划,而评估履行筹划可以在不履行萌芽的情况下,解决这个问题。在逻辑上,实际履行筹划更为有效,因为它包含了履行萌芽时,实际产生的其它细节和统计信息。
接下来你将懂得 XPLAIN 和 ANALYZE 的更多信息,以及若何应用这两个敕令来进一步懂得你的萌芽筹划和萌芽机能。要做到这一点,你须要开端应用两个表:>
- ANALYZE one_million;
- EXPLAIN
- SELECT *
- FROM one_million;
- QUERY PLAN
- _________________________________________________
- Seq Scan on one_million
- (cost=0.00..18334.00 rows=1000000 width=37)
- (1 row)
在以上示例中,我们看到萌芽的 Cost 是0.00..18584.82 ,行数是1025082,列宽是36。
同时,也可以借助 ANALYZE 来更新统计信息 。
除了 EXPLAIN 和 ANALYZE,你也可以借助 EXPLAIN ANALYZE 来检索实际履行时光:
- EXPLAIN ANALYZE
- SELECT *
- FROM one_million;
- QUERY PLAN
- ___________________________________________________
- Seq Scan on one_million
- (cost=0.00..18334.00
推荐阅读
Oracle Advanced Support系统SQL注入漏洞挖掘经验分享
我们可以对这个应用开端进行一些简单的┞缝查,包含: 寻找已经被爆出的马脚 用burp爬取应用 列举常见的路径 查看可获取的页面的源码荣幸的是,我在主页的源码中发清楚明了 一>>>详细阅读
本文标题:如何编写更好的SQL查询
地址:http://www.17bianji.com/lsqh/37237.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示