《电信交换》SQL语句执行计划的探讨

xzdxmynet 发布于 2024-02-20 阅读(36)

《电信交流》陕西西安电信科学技术第十研究院通过分析生成的语句执行计划的讨论;对语句执行计划进行调整和优化关键词:数据库共享池执行计划优化处理性能数据库系统决定了数据库生命力的可用性和优化,大多数数据库上线运行一段时间后,都会有进一步提升性能的需求,这主要涉及到数据库硬件、数据库服务器、库内存、应用程序、操作系统以及数据库参数,因此数据库性能的调整和优化对于整个系统的正常运行起着至关重要的作用,本文重点对数据库SQL语句执行计划的调整和优化进行分析和讨论。在数据库中执行SQL(age)语句时,如果采用不同的写法,执行效率会有很大差异。 语句共享池()是提高SQL执行效率的有效方法。 为了不重复解析SQL语句,提高数据库的性能,在解析一次SQL语句后,将SQL语句和解析后得到的执行计划存储在内存中。 共享池(位于系统全局区域)中的这块内存可以被所有数据库用户共享。 。

因此,在提交执行SQL语句时,会采用严格、完整的匹配方式。 它首先在共享内存中搜索相同的语句(包括空格、换行符等)。 如果该语句与之前执行的语句相同,则无需重新分析SQL语句。 直接从内存中获取语句的执行路径,大大提高数据库运行效率。 下面是判断该SQL语句与共享池中的某一条SQL语句是否为步骤l:对于发出的语句,以发出的语句的文本字符串进行。 如果共享池中SQL语句的哈希值相同,则继续步骤2。 步骤2:将发出的语句的文本字符串(包括大小写、空格和注释)转换为Stepl Compare中标识的所有现有SQL语句。 1000 个以下 SQL 语句。 :语句执行计划探索语句中的值。 这种类型的 SQL 语句称为硬编码 SQL。 b:以下SQL语句被认为是相同的。 .lk1.pC:以下 SQL 语句不被视为相同。 这种类型的SQL语句称为绑定变量()SQL。

在使用绑定变量的 SQL 语句中,必须使用同名的绑定变量。 步骤3:将发出的语句涉及的对象与步骤2中识别现有语句涉及的对象进行比较。例如,用户userl和user2都有用户userl:;发出的EMP语句。 用户 user2 发出的语句:; 由于这两个语句引用的EMP不是引用同一个表,因此它们被认为是不同的。 语句中使用的捆绑变量的绑定类型必须一致。 如果该SQL语句与当前共享池中的另一条SQL语句相同,则直接执行该语句,不进行分析。 在实际开发中,为了提高开发速度,使用了类似于下面mpWH的语句。 上述语句实际上使用了硬编码的SQL语句,因此无法使用共享SQL函数,导致数据库效率低下。 从这两段来看,生成的硬编码SQL语句只是列值不同,其他部分类似。 为了解决这类问题,引入了新的参数,使得硬编码的SQL也可以共享SQL函数参数的使用。 已说明,解决此类问题时,建议实际测试后修改参数值。 因为有可能改变参数值后,硬编码的SQL语句虽然可以使用共享SQL语句,但数据库的实际运行效率会下降。

因此,当你开始编写SQL语句时,尽量使用绑定变量的SQL语句。 2、在生成数据库时,为了实现某种操作,必须使用SQL语句来执行很多步骤:讨论语句的执行计划才能达到操作的目的。 这些步骤可能是从数据库中物理检索数据行,或者使用某种方法准备数据行以供发出语句的用户使用等。用于执行语句的步骤的组合称为执行计划。 SQL语句执行计划的生成对于数据库系统的性能尤其是运行效率有着重要的作用。 生成 SQL1. 使用简单的方法生成执行计划。 al语句执行后会显示统计信息和统计信息。 这种方法生成执行计划非常简单。 需要等待语句执行完毕后才能返回执行计划。 但是,当执行长SQL语句时,优化周期会大大增加。 命令使用该方法生成执行计划时,不执行SQL语句,只列出执行计划,并且不列出统计信息,只存在执行计划。 因此,该方法的可用性不如方法1。存储过程生成执行计划。 使用存储过程跟踪另一个会话发出的 SQL 语句并记录所使用的执行计划,从而提供对性能调优有用的其他信息。

在某些情况下,如果系统运行速度非常慢,而你又不知道是哪条SQL语句造成的,有很多现成的语句可以找出消耗资源较多的语句。 当然,您也可以为正在运行的会话中的所有SQL语句生成执行计划。 这需要跟踪会话,生成跟踪文件,然后使用 ~ order 格式化该文件。 这种获取执行计划的方法非常有用,因为它包含其他附加信息。 SQL语句执行的每个阶段(Parse、Fetch)分别消耗CPU、DISK。 3、影响SQL语句执行计划的因素影响SQL语句执行计划。 在众多因素中,本文主要分析访问路径和表之间的连接这两个因素。 生成执行计划时,需要选择访问路径,方便从数据中选择访问路径。 选择访问路径的方式有很多种,比如全表扫描、通过rowid进行表存储等。 fetch 和索引扫描是其中的三种 (1) 全表扫描 () 全表扫描读取表中的所有行,并检查每一行是否满足语句的 WHERE 限制。 采用多块读操作,设置1个读计数参数)。 它大大减少了I/O读取总数,提高了系统吞吐量。 使用全表扫描的前提是需要检索大量数据(超过总量的5%~10%)。 红色:语句执行计划的讨论。 使用全表扫描的例子】cost ABLE AC SSFU LL DUAL)通过rowid访问表(表rowid或rowid)ro wid指出数据文件、数据块以及行所在块中的位置。 通过rowid访问数据可以快速定位目标数据,是访问单行数据最快的方式。

该访问方法不用于块读取操作。 为了通过rowid访问表,首先必须从语句的WHERE子句中获取所选行的rowid,或者通过对表的一个或多个索引进行索引扫描来获取。 根据获取到的rowid定位每一个选中的行。 该方法通常用在执行计划中通过索引查询数据。 使用 ro wid access dept where rowid, 的示例。 查询计划 SELE CT ) Index Scan ( ) 通过索引查找数据对应的 rowid(非唯一索引可能会返回多个 rowid),根据 rowid 直接从表中获取具体数据。 这种搜索方法称为索引扫描。 )或索引搜索(index)。 一个rowid只代表一行数据,通过一次I/O获取该行对应的数据块。 在这种情况下,IZO 将仅读取一个数据库块跟踪。 除了存储每个索引的值外,还存储具有该值的行对应的rowid。索引扫描在步骤1中扫描索引,获取对应的rowid; 在步骤1中,找到的rowid是从

标签:  sql优化 硬编码 索引 数据库 sql数据库 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。