十步搞定EpiData3.1

十步搞定EpiData3.1
十步搞定EpiData3.1

《十步搞定EpiData3.1》

EpiData3.1是由丹麦软件工程师Jens https://www.360docs.net/doc/2d5005766.html,uritsen.等专门为流行病学调查而设计开发的数据处理软件,是WHO向各国基层卫生工作者唯一推荐的工作软件。初次接触该软件往往很难得心应手,网络上的操作手册往往把简单的事情搞复杂。其实只要做好以下十步,即可搞定EpiData3.1。

一.在“开始”—“程序”中打开EpiData软件。

二.点击菜单栏“文件”,在其下拉菜单中点击“生成调查表文件”,输入原始资料。

三.非指标性内容直接输入。

四.指标性内容输入:

1.文字性指标:将光标移至指标名称后,点击菜单栏“编辑”,在其下拉菜单中点击“字段编辑器”,打开“字段编辑器”对话框,点击“文本”,选择长度(字数乘以2)后点击“插入”。

2.数量性指标:将光标移至指标名称后,点击菜单栏“编辑”。在其下拉菜单中点击“字段编辑器”,打开“字段编辑器”对话框,点击“数字”,选择小数点前后位数后点击“插入”。

3.其它如日期、逻辑(是/否)等内容亦必须在“字段编辑器”中选择、插入。

五.点击菜单栏“文件”,在其下拉菜单中点击“存盘”或“另存为”,在弹出的对话框中选择路径后,在所在的位置中新建文件夹并命名,选择该文件夹点击“打开”、“保存”。

六.点击菜单栏中“rec文件”,在其下拉菜单中点击“生成rec文件”,在弹出的对话框中保持默认值不变直接点击“确定”,随后弹出的“文件标记”对话框可以填写输入者的姓名,或者直接点击“确定”即可跳过。在随后弹出的“信息”对话框中点击“确定”。

七.点击菜单栏中“数据导入/导出”,在其下拉菜单中点击“数据录入/编辑”,在弹出的对话框中保持默认值不变直接点击“打开”。

八.用向下方向键移动光标依次输入指标内容,当最后一个指标内容输入完成后点击向下方向键,在弹出的“确认”对话框中点击“是”保存。

九.重复第七—八步继续输入下一组数据,直至所有数据输入完成后,关闭当前窗口,资料输入任务全部完成。

十.数据管理:

1.需转换数据,可在“开始”—“程序”中打开EpiData 软件,点击菜单栏“数据导入/导出”,在其下拉菜单中移动鼠标至“导入数据”或“数据导出”,在出现的右拉菜单中选择并打开第五步中所建并命名的文件夹,在弹出的对话框中保持默认值不变连续点击“确定”,即可将已输入的数据转换为

txt文本或Excel表格等文件,亦可将txt文本或dbf文件等相关文件导入EpiData数据库。

2.需查阅、打印第八步中所输入的数据,可在“开始”—“程序”中打开EpiData软件,点击菜单栏“文件”,在其下拉菜单中点击“打开EpiData文件”,弹出的对话框中找到第五步中建立并命名的文件夹,选择“EpiData文件”,点击“打开”,在所出现的新窗口的菜单栏中点击“查找”或“文件”,在其下拉菜单中点击“下一条记录”、“前一条记录”或“打印数据表”,即可进行查阅、打印等操作。

3.需继续输入相应的数据,可在“开始”—“程序”中打开EpiData软件,点击菜单栏“文件”,在其下拉菜单中点击“打开EpiData文件”,弹出的对话框中找到第五步中所建立并命名的文件夹,选择“EpiData文件”,点击“打开”,重复第七—八步输入新数据。

4.需压缩、释放和加密数据,需查阅、打印第八步中所输入的数据,可在“开始”—“程序”中打开EpiData软件,点击菜单栏中“工具”,在其下拉菜单中点击“创建压缩文件”或“释放压缩文件”,在弹出的对话框中选择需要压缩、释放及加密的第五步中所建立并命名的文件夹路径(保存路径保持默认不变)后点击“确定”。

如何使用 SQL Server 执行计划,看懂 SQL Server 执行计划,SQL Server 执行计划动作含义,理解SQL执行计划

【如何使用SQL Server 执行计划】 【看懂SQL Server 执行计划】 【SQL Server 执行计划各个动作含义】 【理解SQL Server 执行计划的意思】 要理解执行计划,怎么也得先理解,那各种各样的名词吧。鉴于自己还不是很了解。本文打算作为只写懂的,不懂的懂了才写。 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看的。 名词解析: 扫描:逐行遍历数据。 先建立一张表,并给大家看看大概是什么样子的。 CREATE TABLE Person( Id int IDENTITY(1,1) NOT NULL, Name nvarchar(50) NULL, Age int NULL, Height int NULL, Area nvarchar(50) NULL, MarryHistory nvarchar(10) NULL, EducationalBackground nvarchar(10) NULL, Address nvarchar(50) NULL, InSiteId int NULL ) ON[PRIMARY] 表中的数据14万左右,大概类似下面这样:

此表,暂时没有任何索引。 一、数据访问操作 1、表扫描 表扫描:发生于堆表,并且没有可用的索引可用时,会发生表扫描,表示整个表扫描一次。 现在,我们来对此表执行一条简单的查询语句: SELECT*From Person WHERE Name ='公子' 查看执行计划如下: 表扫描,顾名思义就是整张表扫描,找到你所需要的数据了。 2、聚集索引扫描 聚集索引扫描:发生于聚集表,也相当于全表扫描操作,但在针对聚集列的条件如(WHERE Id > 10)等操作时,效率会较好。

探索MSSQL执行计划

MSSQL优化之——探索MSSQL执行计划 SQL code 谈到优化就必然要涉及索引,就像要讲锁必然要说事务一样,所以你需要了解一下索引,仅仅是索引,就能讲半天了,所以索引我就不说了(打很多字是很累的,况且我也知之甚少),可以去参考相关的文章,这个网上资料比较多了。 今天来探索下MSSQL的执行计划,来让大家知道如何查看MSSQL的优化机制,以此来优化SQL 查询。 --DROP TABLE T_UserInfo---------------------------------------------------- --建测试表 CREATE TABLE T_UserInfo ( Userid varchar(20), UserName varchar(20), RegTime datetime, Tel varchar(20), ) --插入测试数据 DECLARE @I INT DECLARE @ENDID INT SELECT @I = 1 SELECT @ENDID = 100 --在此处更改要插入的数据,重新插入之前要删掉所有数据 WHILE @I <= @ENDID BEGIN INSERT INTO T_UserInfo SELECT 'ABCDE'+CAST(@I AS VARCHAR(20))+'EF','李'+CAST(@I AS VARCHAR(20)), GETDATE(),'876543'+CAST(@I AS VARCHAR(20)) SELECT @I = @I + 1 END --相关SQL语句解释 --------------------------------------------------------------------------- --建聚集索引 CREATE CLUSTERED INDEX INDEX_Userid ON T_UserInfo (Userid) --建非聚集索引 CREATE NONCLUSTERED INDEX INDEX_Userid ON T_UserInfo (Userid) --删除索引 DROP INDEX T_UserInfo.INDEX_Userid ---------------------------------------------------------------------------

sqlplus中查看执行计划分析

sqlplus中查看执行计划分析 对于oracle9i,需要手工设置plustrace角色,步骤如下: 1、在SQL>connect sys/密码as sysdba (密码为:数据库所在的那台服务器的密码) 在sys用户下运行$ORACLE_HOME/sqlplus/admin/plustrce.sql SQL>@$ORACLE_HOME/sqlplus/admin/plustrce.sql 这段sql的实际内容如下: set echo on drop role plustrace; create role plustrace; grant select on v_$sesstat to plustrace; grant select on v_$statname to plustrace; grant select on v_$mystat to plustrace; grant plustrace to dba with admin option; set echo off 以上产生plustrace角色 2、在sys用户下把此角色赋予一般用户 SQL> grant PLUSTRACE to 用户名; (用户名为:当前你登陆数据库的用户名,如:bbass) 3、然后在当前用户下运行$ORACLE_HOME/rdbms/admin/utlxplan.sql SQL>@$ORACLE_HOME/rdbms/admin/utlxplan.sql 它会创建一个plan_table,用来存储分析SQL语句的结果。 4、SQL> set timing on 可查看SQL语句执行的用时 SQL> set autotrace on; 可查看SQL执行计划分析。 关于Autotrace几个常用选项的说明: SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式

看懂sql执行计划

对于SqlServer的优化来说,可能优化查询是很常见的事情。关于数据库的优化,本身也是一个涉及面比较的广的话题,首先,打开【SQL Server Management Studio】,输入一个查询语句看看SqlServer是如何显示查询计划的吧。 select v.OrderID, v.CustomerID, v.CustomerName, v.OrderDate, v.SumMoney, v.Finished from OrdersView as v where v.OrderDate >= '2010-12-1' and v.OrderDate < '2011-12-1'; 其中,OrdersView是一个视图,其定义如下: SELECT dbo.Orders.OrderID, dbo.Orders.CustomerID, dbo.Orders.OrderDate, dbo.Orders.SumMoney, dbo.Orders.Finished, ISNULL(dbo.Customers.CustomerName, N'') AS CustomerName FROM dbo.Orders LEFT OUTER JOIN dbo.Customers ON dbo.Orders.CustomerID = dbo.Customers.CustomerID 对于前一句查询,SqlServer给出的查询计划如下(点击工具栏上的【显示估计的执行计划】按钮): 从这个图,我们至少可以得到3个有用的信息: 1. 哪些执行步骤花费的成本比较高。显然,最右边的二个步骤的成本是比较高的。 2. 哪些执行步骤产生的数据量比较多。对于每个步骤所产生的数据量, SqlServer的执行计划是用【线条粗细】来表示的,因此也很容易地从分辨出来。 3. 每一步执行了什么样的动作。 对于一个比较慢的查询来说,我们通常首先要知道哪些步骤的成本比较高,进而,可以尝试一些改进的方法。一般来说,如果您不能通过:提高硬件性能或者调整OS,SqlServer的设置之类的方式来解决问题,那么剩下的可选方法通常也只有以下这些了:

TOAD中查看SQL的执行计划

TOAD中查看SQL的执行计划 一、TOAD中查看SQL的执行计划: 1、点击工具栏上120救护车图标按钮 2、快捷键Ctrl+E 3、菜单View-Explain plan 二、如果是默认安装TOAD,在查看执行计划时会报一个错: ORA-02404: 未找到指定的计划表 稍微研究了一下,解决这个问题基本上有3个方案: 1、最直接的解决方案:直接创建TOAD所需要的计划表,该脚本在%oracle_home%\rdbms\admin\utlxplan.sql 中,不过该脚本是创建PLAN_TABLE表,表结构一样,改名为TOAD_PLAN_TABLE 即可。如下: CREATE TABLE TOAD_PLAN_TABLE ( STATEMENT_ID VARCHAR2 (32), TIMESTAMP DATE, REMARKS VARCHAR2 (80), OPERATION VARCHAR2 (30), OPTIONS VARCHAR2 (30), OBJECT_NODE VARCHAR2 (128), OBJECT_OWNER VARCHAR2 (30), OBJECT_NAME VARCHAR2 (30), OBJECT_INSTANCE NUMBER, OBJECT_TYPE VARCHAR2 (30), SEARCH_COLUMNS NUMBER, ID NUMBER, COST NUMBER, PARENT_ID NUMBER, POSITION NUMBER, CARDINALITY NUMBER, OPTIMIZER VARCHAR2 (255), BYTES NUMBER, OTHER_TAG VARCHAR2 (255), OTHER LONG, PARTITION NUMBER, PARTITION_START VARCHAR2 (255), PARTITION_STOP VARCHAR2 (255), DISTRIBUTION VARCHAR2 (30) ) ; 2、偷机取巧的处理方案:修改TOAD参数 将菜单View -> Options ->Oracle -> General -> Explain Plan Table name中的参数修改为PLAN_TABLE即可使用。 3、通过TOAD自带功能创建表结构: 在菜单tools -> server side objects wizard下运行,不过要建立一些对象,最好建议一个单独的表空间放这些对象。 在10g中带有plan_table这张表,但是将名字改为了plan_table$ 只需$ORACLE_HOME/sqlplus/admin/plustrce.sql创建plustrace角色 grant plustrace to public

不借助第三方工具查看SQL的执行计划

SQL> connect sys as sysdba --创建执行计划使用的表 SQL> @?\rdbms\admin\utlxplan 通过以下方法可以把Autotrace的权限授予每个用户,如果你需要限制Autotrace权限,可以把对public的授权改为对特定user的授权。 1、把对plan_table表所有权限赋给public角色 SQL> grant all on plan_table to public ; 2、创建一个角色plustrace SQL> create role plustrace; 3、授权给plustrace角色 SQL> grant select on v_$sesstat to plustrace; SQL> grant select on v_$statname to plustrace; SQL> grant select on v_$session to plustrace; 4、把角色plstrace授权给DBA SQL> grant plustrace to dba with admin option; 5、DBA把权限授予public SQL> grant plustrace to public; 这样用户可以在sqlplus中设置如下的选项 SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式 SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告 SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息 SET AUTOTRACE ON ----------------- 包含执行计划和统计信息 SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出 SQL>SET autotrace on; SQL>select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- ---------- -(参考下载:https://www.360docs.net/doc/2d5005766.html,)--------- ---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 1171.28 20 7499 ALLEN SALESMAN 7698 20-2月 -81 2342.56 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1830.13 500 30 7566 JONES MANAGER 7839 02-4月 -81 4355.7 20 7654 MARTIN SALESMAN 7698 28-9月 -81 1830.13 1400 30 7698 BLAKE MANAGER 7839 01-5月 -81 4172.69 30 7782 CLARK MANAGER 7839 09-6月 -81 3587.05 10 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 7320.5 10 7844 TURNER SALESMAN 7698 08-9月 -81 2196.15 0 30 7876 ADAMS CLERK 7788 23-5月 -87 1100 20

执行计划详解

简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容。 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 Rowid的概念 Recursive Sql概念 Predicate(谓词) DRiving Table(驱动表) Probed Table(被探查表) 组合索引(concatenated index) 可选择性(selectivity) 二.oracle访问数据的存取方法 1)全表扫描(Full Table Scans, FTS) 2)通过ROWID的表存取(Table Access by ROWID或rowid lookup) 3)索引扫描(Index Scan或index lookup)有4种类型的索引扫描:(1)索引唯一扫描(index unique scan) (2)索引范围扫描(index range scan) 在非唯一索引上都使用索引范围扫描。使用index rang scan的3种情况: (a)在唯一索引列上使用了range操作符(> < <> >= <= between) (b)在组合索引上,只使用部分列进行查询,导致查询出多行 (c)对非唯一索引列上进行的任何查询。 (3)索引全扫描(index full scan) (4)索引快速扫描(index fast full scan) 三、表之间的连接 1,排序 - - 合并连接(Sort Merge Join, SMJ) 2,嵌套循环(Nested Loops, NL) 3,哈希连接(Hash Join, HJ) 另外,笛卡儿乘积(Cartesian Product) 总结Oracle连接方法 Oracle执行计划总结概述 +++ 一.相关的概念

SQL语句的执行原理分析及where 查询条件决定SQL效率

SQL语句的执行原理分析及where 查询条件决定SQL效率原理: 第一步:应用程序把查询SQL语句发给服务器端执行。 我们在数据层执行SQL语句时,应用程序会连接到相应的数据库服务器,把SQL语句发送给服务器处理。 第二步:服务器解析请求的SQL语句。 1:SQL计划缓存,经常用查询分析器的朋友大概都知道这样一个事实,往往一个查询语句在第一次运行的时候需要执行特别长的时间,但是如果你马上或者在一定时间内运行同样的语句,会在很短的时间内返回查询结果。 原因: 1):服务器在接收到查询请求后,并不会马上去数据库查询,而是在数据库中的计划缓存中找是否有相对应的执行计划,如果存在,就直接调用已经编译好的执行计划,节省了执行计划的编译时间。 2):如果所查询的行已经存在于数据缓冲存储区中,就不用查询物理文件了,而是从缓存中取数据,这样从内存中取数据就会比从硬盘上读取数据快很多,提高了查询效率.数据缓冲存储区会在后面提到。 2:如果在SQL计划缓存中没有对应的执行计划,服务器首先会对用户请求的SQL语句进行语法效验,如果有语法错误,服务器会结束查询操作,并用返回相应的错误信息给调用它的应用程序。 注意:此时返回的错误信息中,只会包含基本的语法错误信息,例如select 写成selec等,错误信息中如果包含一列表中本没有的列,此时服务器是不会检查出来的,因为只是语法验证,语义是否正确放在下一步进行。 3:语法符合后,就开始验证它的语义是否正确,例如,表名,列名,存储过程等等数据库对象是否真正存在,如果发现有不存在的,就会报错给应用程序,同时结束查询。 4:接下来就是获得对象的解析锁,我们在查询一个表时,首先服务器会对这个对象加锁,这是为了保证数据的统一性,如果不加锁,此时有数据插入,但因为没有加锁的原因,查询已经将这条记录读入,而有的插入会因为事务的失败会回滚,就会形成脏读的现象。 5:接下来就是对数据库用户权限的验证,SQL语句语法,语义都正确,此时并不一定能够得到查询结果,如果数据库用户没有相应的访问权限,服务器会报出权限不足的错误给应用程序,在稍大的项目中,往往一个项目里面会包含好几个数据库连接串,这些数据库用户具有不同的权限,有的是只读权限,有的是只写权限,有的是可读可写,根据不同的操作选取不同的用户来执行,稍微不注意,无论你的SQL语句写的多么完善,完美无缺都没用。 6:解析的最后一步,就是确定最终的执行计划。当语法,语义,权限都验证后,服务器并不会马上给你返回结果,而是会针对你的SQL进行优化,选择不同的查询算法以最高效的形式返回给应用程序。例如在做表联合查询时,服务器会根据开销成本来最终决定采用hash join,merge join ,还是loop join,采用哪一个索引会更高效等等,不过它的自动化优化是有限的,要想写出高效的查询SQL还是要优化自己的SQL查询语句。 当确定好执行计划后,就会把这个执行计划保存到SQL计划缓存中,下次在有相同的执行请求时,就直接从计划缓存中取,避免重新编译执行计划。 第三步:语句执行。 服务器对SQL语句解析完成后,服务器才会知道这条语句到底表态了什么意思,接下来才会真正的执行SQL语句。 此时分两种情况:

半小时看懂Oracle的执行计划

一、什么是执行计划 An explain plan is a representation of the access path that is taken when a query is executed within Oracle. 二、如何访问数据 At the physical level Oracle reads blocks of data. The smallest amount of data read is a single Oracle block, the largest is constrained by operating system limits (and multiblock i/o). Logically Oracle finds the data to read by using the following methods: Full Table Scan (FTS) --全表扫描 Index Lookup (unique & non-unique) --索引扫描(唯一和非唯一) Rowid --物理行id 三、执行计划层次关系 When looking at a plan, the rightmost (ie most inndented) uppermost operation is the first thing that is executed. --采用最右最上最先执行的原则看层次关系,在同一级如果某个动作没有子ID就最先执行 1、看一个简单的例子: Query Plan ----------------------------------------- SELECT STATEMENT [CHOOSE] Cost=1234 **TABLE ACCESS FULL LARGE [:Q65001] [ANALYZED]--[:Q65001]表示是并行方式,[ANALYZED]表示 该对象已经分析过了 优化模式是CHOOSE的情况下,看Cost参数是否有值来决定采用CBO还是RBO: SELECT STATEMENT [CHOOSE] Cost=1234 --Cost有值,采用CBO SELECT STATEMENT [CHOOSE] Cost= --Cost为空,采用RBO

通过分析SQL语句的执行计划优化SQ1

通过分析SQL语句的执行计划优化SQL(目录) 目录 第1章性能调整综述 第2章有效的应用设计 第3章 SQL语句处理的过程 第4章 ORACLE的优化器 第5章 ORACLE的执行计划 访问路径(方法) -- access path 表之间的连接 如何产生执行计划 如何分析执行计划 如何干预执行计划 - - 使用hints提示 具体案例分析 第6章其它注意事项 附录 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖. 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性. 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关. 如果table已经被analyze过, 优化器模式将自动成为CBO , 反之,数据库将采用RULE形式的优化器. 在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器. 2. 访问Table的方式 ORACLE 采用两种访问表中记录的方式: a. 全表扫描

干货分享 达梦SQL优化—执行计划篇(二)

达梦SQL优化—执行计划篇(二) 之前的分享中,我们介绍了如何查看执行计划。接下来我们来说一下统计信息。统计信息可以简单理解为将索引(包含原表ROWID聚簇索引)的某一列进行统计分析,列出其最大最小值,存在多少不同值,各个值存在多少个辅助信息。 对于没有统计信息的列,DM7简单的按照一定比例进行概率过滤。 涉及到的INI参数为: SEL_RATE_EQU ,等值过滤选择率,默认0.025。 SEL_RATE_SINGLE,一般条件选择率,默认0.05。 来看例子 create table test10(id1 int,id2 varchar,id3 varchar,id4 varchar); --方便起见,我们插入1W行数据,ID1从1-10000,ID2 为0a - 4a, id3全为b, id为1c - 10000c insert into test10 select level,level % 5 || 'a','b',level || 'c' from dual connect by level <= 10000; --SEL20 SQL> explain select * from test10 where id1 = 5; 可以看到CSCN涉及1W行数据,这个没有问题,但是过滤条件SLCT的CARD标注为250行(#SLCT2: [1, 250, 156]),这个和我们的预期是不一致的,因为不存在统计信息。 系统按10000 * 0.025直接给出250的结果。 如果存在多个等值条件呢? --SEL21 --我们这里保障列与值类型相同id2 varchar = '5' SQL> explain select * from test10 where id1 = 5 and id2 = '5';

Oracle查看执行计划的几种方法

Oracle查看执行计划的几种方法 原创作者:lhrbest时间:2017-04-09 14:42:0123930 Oracle查看执行计划的几种方法 一般来说,有如下几种获取执行计划的方式: 1、AUTOTRACE方式 AUTOTRACE是Oracle自带的客户端工具SQL*Plus的一个特性。启用AUTOTRACE后,SQL*Plus会自动收集执行过的SQL语句的执行计划、性能统计数据等,并在语句执行结束后显示在SQL*Plus中。 DBA用户可以直接使用AUTOTRACE功能,但是如果用户没有DBA权限,那么需要在SYS用户下执行plustrce.sql脚本,自动创建PLUSTRACE角色,再把PLUSTRACE权限赋给普通用户即可。 $ORACLE_HOME/sqlplus/admin/plustrce.sql GRANT PLUSTRACE TO USER_LHR; 另外,若启用AUTOTRACE报“SP2-0611”的错误,则可以执行utlxplan.sql脚本来创建表PLAN_TABLE,如下所示: SQL> set autot on SP2-0613: 无法验证 PLAN_TABLE 格式或实体 SP2-0611: 启用EXPLAIN报告时出错 SQL> @?/rdbms/admin/utlxplan.sql

@?/rdbms/admin/utlxplan.sql CREATE PUBLIC SYNONYM PLAN_TABLE FOR PLAN_TABLE; GRANT ALL ON PLAN_TABLE TO PUBLIC; @?/sqlplus/admin/plustrce.sql GRANT PLUSTRACE TO PUBLIC; AUTOTRACE的语法如下所示: SET AUTOTRACE {OFF|ON|TRACEONLY} [EXPLAIN] [STATISTICS] 其中,AUTOTRACE可简写为AUTOT,TRACEONLY可简写为TRACE,EXPLAIN可简写为EXP,STATISTICS可简写为STAT。SQL> SET AUTOT ON SQL> SELECT COUNT(*) FROM PLAN_TABLE; COUNT(*) ---------- 68 Execution Plan ---------------------------------------------------------- Plan hash value: 1751138260 -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 3 (0)| 00:00:01 |

SQLServer查询执行计划分析

看懂执行计划 例子1 以AdventureWorks的DatabaseLog查询为例: SELECT*FROM[AdventureWorks2008R2].[dbo].[DatabaseLog] ?Cached plan size – how much memory the plan generated by this query will take up in stored procedure cache. This is a useful number when investigating cache performance issues because you'll be able to see which plans are taking up more memory. ?Estimated Operator Cost –we've already seen this as the percentage cost in Figure 1. ?Estimated Subtree Cost – tells us the accumulated optimizer cost assigned to this step and all previous steps, but remember to read from right to left. This number is meaningless in the real world, but is a mathematical evaluation used by the query optimizer to determine the cost of the operator in question; it represents the amount of time that the optimizer thinks this operator will take. ?Estimated number of rows – calculated based on the statistics available to the optimizer for the table or index in question.

执行计划的查看和分析

执行计划的查看和分析 1. 如何获得执行计划 要为一个语句生成执行计划,可以有3种方法: 1.1. autotrace Sql> set autotrace on Sql> select * from dual; 执行完语句后,会显示explain plan 与统计信息。 这个语句的优点就是它的缺点,这样在用该方法查看执行时间较长的sql语句时,需要等待该语句执行成功后,才返回执行计划,使优化的周期大大增长。 如果不想执行语句而只是想得到执行计划可以采用: Sql> set autotrace traceonly 这样,就只会列出执行计划,而不会真正的执行语句,大大减少了优化时间。虽然也列出了统计信息,但是因为没有执行语句,所以该统计信息没有用处, 如果执行该语句时遇到错误,解决方法为: (1)在要分析的用户下: Sqlplus > @ ?\rdbms\admin\utlxplan.sql (2) 用sys用户登陆 Sqlplus > @ ?\sqlplus\admin\plustrce.sql Sqlplus > grant plustrace to user_name; - - user_name是上面所说的分析用户 1.2. explain plan (1) sqlplus > @ ?\rdbms\admin\utlxplan.sql (2) sqlplus > explain plan set statement_id =’???’ for select ……………… 注意,用此方法时,并不执行sql语句,所以只会列出执行计划,不会列出统计信息,并且执行计划只存在plan_table中。所以该语句比起set autotrace traceonly可用性要差。需要用下面的命令格式化输出,所以这种方式我用的不多: set linesize 150 set pagesize 500 col PLANLINE for a120 SELECT EXECORD EXEC_ORDER, PLANLINE FROM (SELECT PLANLINE, ROWNUM EXECORD, ID, RID FROM (SELECT PLANLINE, ID, RID, LEV FROM (SELECT lpad(' ',2*(LEVEL),rpad(' ',80,' '))|| OPERATION||' '|| -- Operation DECODE(OPTIONS,NULL,'','('||OPTIONS || ') ')|| -- Options DECODE(OBJECT_OWNER,null,'','OF '''|| OBJECT_OWNER||'.')|| -- Owner DECODE(OBJECT_NAME,null,'',OBJECT_NAME|| ''' ')|| -- Object Name

相关主题
相关文档
最新文档