当前位置:文档之家› GreenPlum的SQL优化方案

GreenPlum的SQL优化方案

GreenPlum的SQL优化方案
GreenPlum的SQL优化方案

GreenPlumn的SQL语句查询优化

数据库查询预准备

1. VACUUM

?vacuum只是简单的回收空间且令其可以再次使用,没有请求排它锁,仍旧可以对表读写

?vacuum full执行更广泛的处理,包括跨块移动行,以便把表压缩至使用最少的磁盘块数目存储。相对vacuum要慢,而且会请求排它锁。

?定期执行:在日常维护中,需要对数据字典定期执行vacuum,可以每天在数据库空闲的时候进行。然后每隔一段较长时间(两三个月)对系统表执行一次vacuum full,这个操作需要停机,比较耗时,大表可能耗时几个小时。

?reindex:执行vacuum之后,最好对表上的索引进行重建

2. ANALYZE

?命令:analyze [talbe [(column,..)]]

?收集表内容的统计信息,以优化执行计划。如创建索引后,执行此命令,对于随即查询将会利用索引。

?自动统计信息收集

?在postgresql.conf中有控制自动收集的参数gp_autostats_mode设置,gp_autostats_mode三个值:none、no_change、on_no_stats(默认)

o none:禁止收集统计信息

o on change:当一条DML执行后影响的行数超过

gp_autostats_on_change_threshold参数指定的值时,会执行完这条DML后再

自动执行一个analyze 的操作来收集表的统计信息。

o no_no_stats:当使用create talbe as select 、insert 、copy时,如果在目标表中没有收集过统计信息,那么会自动执行analyze 来收集这张表的信息。gp

默认使用on_no_stats,对数据库的消耗比较小,但是对于不断变更的表,数

据库在第一次收集统计信息之后就不会再收集了。需要人为定时执行

analyze.

?如果有大量的运行时间在1分钟以下的SQL,你会发现大量的时间消耗在收集统计信息上。为了降低这一部分的消耗,可以指定对某些列不收集统计信息,如下所示:

? 1. create table test(id int, name text,note text);

上面是已知道表列note不需出现在join列上,也不会出现在where语句的过滤条件下,因为可以把这个列设置为不收集统计信息:

1. alter table test alter note SET STATISTICS 0;

3. EXPLAIN执行计划

显示规划器为所提供的语句生成的执行规划。

?cost:返回第一行记录前的启动时间,和返回所有记录的总时间(以磁盘页面存取为单位计量)

?rows:根据统计信息估计SQL返回结果集的行数

?width:返回的结果集的每一行的长度,这个长度值是根据pg_statistic表中的统计信息

来计算的。

4. 两种聚合方式

?hashaggregate

根据group by字段后面的值算出hash值,并根据前面使用的聚合函数在内存中维护对应的列表,几个聚合函数就有几个数组。相同数据量的情况下,聚合字段的重复度越小,使用的内存越大。

?groupaggregate

先将表中的数据按照group by的字段排序,在对排好序的数据进行全扫描,并进行聚合函数计算。消耗内存基本是恒定的。

?选择

在SQL中有大量的聚合函数,group by的字段重复值比较少的时候,应该用

groupaggregate

5. 关联

分为三类:hash join、nestloop join、merge join,在保证sql执行正确的前提下,规划器优先采用hash join。

?hash join: 先对其中一张关联的表计算hash值,在内存中用一个散列表保存,然后对另外一张表进行全表扫描,之后将每一行与这个散列表进行关联。

?nestedloop:关联的两张表中的数据量比较小的表进行广播,如笛卡尔积:select * fromtest1,test2

?merge join:将两张表按照关联键进行排序,然后按照归并排序的方式将数据进行关联,效率比hash join差。full outer join只能采用merge join来实现。

?关联的广播与重分布解析P133,一般规划器会自动选择最优执行计划。

?有时会导致重分布和广播,比较耗时的操作

6. 重分布

一些sql查询中,需要数据在各节点重新分布,受制于网络传输、磁盘I/O,重分布的速度

比较慢。

?关联键强制类型转换

一般,表按照指定的分布键作hash分部。如果两个表按照id:intege、id:numericr分

布,关联时,需要有一个表id作强制类型转化,因为不同类型的hash值不一样,因

而导致数据重分布。

?关联键与分部键不一致

?group by、开窗函数、grouping sets会引发重分布

查询优化

通过explain观察执行计划,从而确定如果优化SQL。

1. explain参数

显示规划器为所提供的语句生成的执行规划。

?cost:返回第一行记录前的启动时间,和返回所有记录的总时间(以磁盘页面存取为单位计量)

?rows:根据统计信息估计SQL返回结果集的行数

?width:返回的结果集的每一行的长度,这个长度值是根据pg_statistic表中的统计信息来计算的。

2. 选择合适分布键

分布键选择不当会导致重分布、数据分布不均等,而数据分布不均会使SQL集中在一个segment节点的执行,限制了gp整体的速度。

?使所有节点数据存放是均匀的,数据分布均匀才能充分利用多台机器查询,发挥分布式的优势。

?join、开窗函数等尽量以分布键作为关联键、分区键。尤其需要注意的是join、开窗函数会依据关联键、分区键做重分布或者广播操作,因而若分布键和关联键不一致,不论如何修改分布键,也是需要再次重分布的。

?尽量保证where条件产生的结果集的存储也尽量是均匀的。

?查看某表是否分布不均:select gp_segment_id,count(*) from fact_tablegroup by gp_segment_id

?在segment一级,可以通过select gp_segment_id,count(*) from fact_table group by gp_segment_id的方式检查每张表的数据是否均匀存放?在系统级,可以直接用df -h 或du -h检查磁盘或者目录数据是否均匀

?查看数据库中数据倾斜的表

首先定义数据倾斜率为:最大子节点数据量/平均节点数据量。为避免整张表的数据量为空,同时对结果的影响很小,在平均节点数据量基础上加上一个很小的值,SQL 如下:

SELECT tabname,

max(SIZE)/(avg(SIZE)+0.001) AS max_div_avg,

sum(SIZE) total_size

FROM

(SELECT gp_segment_id,

oid::regclasstabname,

pg_relation_size(oid) SIZE

FROM gp_dist_random('pg_class')

WHERE relkind='r'

AND relstorage IN ('a','h')) t

GROUPBY tabname

ORDERBY2DESC;

3. 分区表

按照某字段进行分区,不影响数据在数据节点上的分布,但是,仅在单个数据节点上,对数据进行分区存储。可以加快分区字段的查询速度。

4. 压缩表

对于大AO表和分区表使用压缩,以节省存储空间并提高系统I/O,也可以在字段级别配置压缩。应用场景:

?不需要对表进行更新和删除操作

?访问表的时候基本上是全表扫描,不需要建立索引

?不能经常对表添加字段或者修改字段类型

5. 分组扩展

Greenplum数据库的GROUP BY扩展可以执行某些常用的计算,且比应用程序或者存储过程效率高。

GROUPBY ROLLUP(col1, col2, col3)

GROUPBY CUBE(col1, col2, col3)

GROUPBY GROUPING SETS((col1, col2), (col1, col3))

ROLLUP 对分组字段(或者表达式)从最详细级别到最顶级别计算聚合计数。ROLLUP的参数是一个有序分组字段列表,它计算从右向左各个级别的聚合。例如ROLLUP(c1, c2, c3) 会为下列分组条件计算聚集:

(c1, c2, c3)

(c1, c2)

(c1)

()

CUBE 为分组字段的所有组合计算聚合。例如CUBE(c1, c2, c3) 会计算一下聚合:

(c1, c2, c3)

(c1, c2)

(c2, c3)

(c1, c3)

(c1)

(c2)

(c3)

()

GROUPING SETS 指定对那些字段计算聚合,它可以比ROLLUP和CUBE更精确地控制分区条件。

6. 窗口函数

窗口函数可以实现在结果集的分组子集上的聚合或者排名函数,例如sum(population) over (partition by city)。窗口函数功能强大,性能优异。因为它在数据库内部进行计算,避免了数据传输。

?窗口函数row_number()计算一行在分组子集中的行号,例如row_number() over (order by id)。

?如果查询计划显示某个表被扫描多次,那么通过窗口函数可能可以降低扫描次数。

?窗口函数通常可以避免使用自关联。

7. 列存储和行存储

列存储亦即同一列的数据都连续保存在一个物理文件中,有更高的压缩率,适合在款表中对部分字段进行筛选的场景。

需要注意的是:若集群中节点较多,而且表的列也较多,每个节点的每一列将会至少产生一个文件,那么总体上将会产生比较多的文件,对表的DDL操作就会比较慢。在和分区表使用时,将会产生更多文件,甚至可能超过linux的文件句柄限制,要尤其注意。

?行存储:如果记录需要update/delete,那么只能选择非压缩的行存方式。对于查询,如果选择的列的数量经常超过30个以上的列,那么也应该选择行存方式。

?列存储:如果选择列的数量非常有限,并且希望通过较高的压缩比换取海量数据查询时的较好的IO性能,那么就应该选择列存模式。其中,列存分区表,每个分区的每个列都会有一个对应的物理文件,所以要注意避免文件过多,导致可能超越linux 上允许同时打开文件数量的上限以及DDL命令的效率很差。

8. 函数和存储过程

虽然支持游标但是,尽量不要使用游标方式处理数据,而是应该把数据作为一个整体进行操作。

9. 索引使用

?如果是从超大结果集合中返回非常小的结果集(不超过5%),建议使用BTREE索引(非典型数据仓库操作)

?表记录的存储顺序最好与索引一致,可以进一步减少IO(好的index cluster)

?where条件中的列用or的方式进行join,可以考虑使用索引

?键值大量重复时,比较适合使用bitmap索引

有关索引使用的测试见GP索引调优测试–基本篇和GP索引调优测试–排序篇。

10. NOT IN

?在gp4.3中已经进行了优化,采用hash left anti semi join进行连接。

?以下只针对gp4.1及之前

o有not in的SQL,都会采用笛卡尔积来执行,采用nested join,效率极差

o not in==》改用left join去重后的表关联来实现

o例子

o select * from test1 where col1 not in (select co l2 from test1)

改为

select * from test1 a left join (select col2 from

test1 group bycol2) b on a.col1=b.col2 where b.c

ol2 is null

运行时间由30多秒提升至92毫秒。

11. 聚合函数太多

?一条SQL中聚合函数太多,而且可能由于统计信息不够详细或者SQL太负责,错选hashaggregate来执行,导致内存不足。

?解决方法:

o拆分成多个SQL来执行,减少hashaggregate使用的内存

o执行enable_hashagg=off,把hashaggregate参数关掉,强制不采用。将会采用groupaggregate,这样排序时间会长一些,但是内存可控,建议采用这种

方式比较简单。

12. 资源队列

数据写入、查询分别使用不同的用户,GP创建用户时为不同用户指定不同的资源队列。

13. 其它优化技巧

?用group by对distinct改写,因为DISTINCT要进行排序操作

?用UNION ALL加GROUP BY的方式对UNION改写

?尽量使用GREENPLUM自身提供的聚合函数和窗口函数去完成一些复杂的分析

GreenPlum的SQL优化方案

GreenPlumn的SQL语句查询优化 数据库查询预准备 1. VACUUM ?vacuum只是简单的回收空间且令其可以再次使用,没有请求排它锁,仍旧可以对表读写 ?vacuum full执行更广泛的处理,包括跨块移动行,以便把表压缩至使用最少的磁盘块数目存储。相对vacuum要慢,而且会请求排它锁。 ?定期执行:在日常维护中,需要对数据字典定期执行vacuum,可以每天在数据库空闲的时候进行。然后每隔一段较长时间(两三个月)对系统表执行一次vacuum full,这个操作需要停机,比较耗时,大表可能耗时几个小时。 ?reindex:执行vacuum之后,最好对表上的索引进行重建 2. ANALYZE ?命令:analyze [talbe [(column,..)]] ?收集表内容的统计信息,以优化执行计划。如创建索引后,执行此命令,对于随即查询将会利用索引。 ?自动统计信息收集 ?在postgresql.conf中有控制自动收集的参数gp_autostats_mode设置,gp_autostats_mode三个值:none、no_change、on_no_stats(默认) o none:禁止收集统计信息 o on change:当一条DML执行后影响的行数超过 gp_autostats_on_change_threshold参数指定的值时,会执行完这条DML后再 自动执行一个analyze 的操作来收集表的统计信息。 o no_no_stats:当使用create talbe as select 、insert 、copy时,如果在目标表中没有收集过统计信息,那么会自动执行analyze 来收集这张表的信息。gp 默认使用on_no_stats,对数据库的消耗比较小,但是对于不断变更的表,数 据库在第一次收集统计信息之后就不会再收集了。需要人为定时执行 analyze.

OracleSQL的优化

Oracle SQL的优化 标签:oraclesql优化date数据库subquery 2009-10-14 21:18 18149人阅读评论(21) 收藏举报分类: Oracle Basic Knowledge(208) SQL的优化应该从5个方面进行调整: 1.去掉不必要的大型表的全表扫描 2.缓存小型表的全表扫描 3.检验优化索引的使用 4.检验优化的连接技术 5.尽可能减少执行计划的Cost SQL语句: 是对数据库(数据)进行操作的惟一途径; 消耗了70%~90%的数据库资源;独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低; 可以有不同的写法;易学,难精通。 SQL优化: 固定的SQL书写习惯,相同的查询尽量保持相同,存储过程的效率较高。 应该编写与其格式一致的语句,包括字母的大小写、标点符号、换行的位置等都要一致 ORACLE优化器: 在任何可能的时候都会对表达式进行评估,并且把特定的语法结构转换成等价的结构,这么做的原因是 要么结果表达式能够比源表达式具有更快的速度 要么源表达式只是结果表达式的一个等价语义结构 不同的SQL结构有时具有同样的操作(例如: = ANY (subquery) and IN (subquery)),ORACLE会把他们映射到一个单一的语义结构。 1 常量优化: 常量的计算是在语句被优化时一次性完成,而不是在每次执行时。下面是检索月薪大于2000的的表达式: sal > 24000/12

sal > 2000 sal*12 > 24000 如果SQL语句包括第一种情况,优化器会简单地把它转变成第二种。 优化器不会简化跨越比较符的表达式,例如第三条语句,鉴于此,应尽量写用常量跟字段比较检索的表达式,而不要将字段置于表达式当中。否则没有办法优化,比如如果sal上有索引,第一和第二就可以使用,第三就难以使用。 2 操作符优化: 优化器把使用LIKE操作符和一个没有通配符的表达式组成的检索表达式转换为一个“=”操作符表达式。 例如:优化器会把表达式ename LIKE 'SMITH'转换为ename = 'SMITH' 优化器只能转换涉及到可变长数据类型的表达式,前一个例子中,如果ENAME 字段的类型是CHAR(10),那么优化器将不做任何转换。 一般来讲LIKE比较难以优化。 其中: ~~IN 操作符优化: 优化器把使用IN比较符的检索表达式替换为等价的使用“=”和“OR”操作符的检索表达式。 例如,优化器会把表达式ename IN ('SMITH','KING','JONES')替换为 ename = 'SMITH' OR ename = 'KING' OR ename = 'JONES‘ oracle 会将 in 后面的东西生成一存中的临时表。然后进行查询。 如何编写高效的SQL: 当然要考虑sql常量的优化和操作符的优化啦,另外,还需要: 1 合理的索引设计: 例:表record有620000行,试看在不同的索引下,下面几个SQL的运行情况:语句A SELECT count(*) FROM record WHERE date >'19991201' and date <'19991214‘and amount >2000 语句B

2020年(Oracle管理)如何优化SQL语句以提高Oracle执行效率

(Oracle管理)如何优化SQL语句以提高Oracle执 行效率

(1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表drivingtable)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询,那就需要选择交叉表(intersectiontable)作为基础表,交叉表是指那个被其他表所引用的表。 (2)WHERE子句中的连接顺序: Oracle采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。(3)SELECT子句中避免使用‘*’: Oracle在解析的过程中,会将‘*’依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。 (4)减少访问数据库的次数: Oracle在内部执行了许多工作:解析SQL语句,估算索引的利用率,绑定变量,读数据块等。(5)在SQL*Plus,SQL*Forms和Pro*C中重新设置ARRAYSIZE参数,可以增加每次数据库访问的检索数据量,建议值为200。 (6)使用DECODE函数来减少处理时间: 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表。 (7)整合简单,无关联的数据库访问: 如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)。 (8)删除重复记录: 最高效的删除重复记录方法(因为使用了ROWID)例子:DELETEFROMEMPEWHEREE.ROWID>(SELECTMIN(X.ROWID)

OA工作流使用详解

信达OA工作流使用详解 概念篇 随着企业管理信息化进程的不断深入,协同应用软件的概念已深入人心,而工作流系统正是协同应用软件的核心。通过应用IT技术来规范工作流程、提高工作的执行效率和准确度,是工作流系统主要解决的问题。 信达OA的工作流功能正是为这一需求而设计,可实现业务或公文的申请、审批、会签、登记、操作等环节的管理,可将工作过程进行记录,便于日后检查。并实现数据的规范化录入、查询、统计和存档。 简单来说,工作流就是把一项工作化解为多个步骤,由多人协同来完成。这里所指的工作是形形色色的,在办公室里进行的很多不同类型的工作,都可以用工作流系统来表达,信达OA的工作流由表单和流程这2个重要因素构成:表单:在工作流系统中,与工作相关的数据都可以通过“表单”来体现,“表单”是数据的载体,相当于现实工作中的各类工作单;在表单以外,还可以通过附件文件来传递数据与信息。 流程:在工作流系统中,工作过程都可以通过“流程”的定义来体现,“流程”是工作过程的描述,代表了一种制度或规范。 工作流系统相当于一个“万能模块”,通过合理的流程设置,规范化运作,可对我们的日常办公和企业管理提供极大的便利。 信达OA工作流的一些概念: 1、工作流就是几个人协同完成一项工作,简单而言,就是几个人按次序填写同一张“表单”,填写会签意见和传递附件。 2、表单可以由软件用户自行设计(一般由管理员设计好)。 3、信达OA的表单格式可以用网页设计工具或word等设计,设计好后复制、粘贴到“表单智能设计器”中,再添加表单控件就可以了。 4、每个流程对应一个表单,不同流程可以共用同一个表单。 5、流程分为固定流程和自由流程两种,固定流程由固定步骤组成,用户事先需定义好,自由流程无需定义流程步骤。 6、固定流程的每个步骤都需要设定经办人、可写字段、下一步骤等信息。 7、固定流程第一个步骤设定的经办人,才有权新建该流程(道理可想而知)。 8、执行中的工作和已完成的工作,都可以通过工作查询功能进行查询。 9、任何流程都可以指定监控人员和查询人员,监控人员可随时转交下步或终止流程(自由流程),监控人员和查询人员都可以查询该流程全部工作。

工作流模块常见问题解答

为什么我的表单明明有内容,但预览却提示“表单内容为空”? 表单在添加控件之前预览为空,在表单中添加相应控件即可。 为什么我不能新建某个流程的工作? 需要检查两个设置:a、流程步骤第一步的步骤号必须是1;b、流程第一步骤的经办权限必须设置。 为什么我新建了工作对表单不能操作,无法填写数据? 联系管理员设置好本步骤的可写字段。 为什么表单里的有些控件我看不到? 可能是管理员设置了本步骤的保密字段。 为什么我办理工作时只有办理完毕,不能转交下一步? 当步骤选项设置为“无主办会签”时,只有最后会签人员才能转交下一步,其他人员办理工作只有办理完毕选项。 为什么我办理工作时会出现“无公共附件,并且您无权上传附件”提示? 因为流程设计中本步骤没有对公共附件的可写权限。 我想给流程换一个表单,为什么设计时无法选择了? 已经建立过工作的流程,表单就不能修改了。 为什么转交给张三的工作却到了李四那? 检查一下工作委托的设置,应该是设置了委托规则,将张三的工作交给李四处理了。 在我的工作和工作查询中打开工作详情和流程图页面空白,怎么解决? 请检查杀毒软件,在IE8环境下安装卡巴2010会导致此现象。 超时工作统计页面显示“该页无法显示”?

在系统管理—菜单管理检查“超时统计”的子模块路径是否正确,09版子模块路径为workflow/timeout_stat 流程转交提示“Parse error: syntax error, unexpected T_STRING in D:\MYOA\webroot\general\workflow\list\turn\condition.php(393) : eval()'d code on line 1” 请检查各步骤的条件设置,注意条件公式里的括号要用英文状态下的。 表单设计好之后点击“预览表单”,页面空白? 检查表单代码,将display属性删掉就可以了。 流程设计器看不到步骤的图形? a.检查浏览器是否阻止弹出窗口了; b.如果未阻止弹出窗口,并且IE安全级别比较低还 是不显示,用超级兔子修复浏览器 工作办理界面看不到“转交下一步”按钮? 如果右侧没有滚动条,请检查表单代码;如果右侧有滚动条仍然看不到“转交下一步”按钮,将屏幕分辨率调整一下。 工作流转交提示“表单尚未加载完毕,请等待后提交”? 设置好浏览器的安全级别,重新安装插件即可;如果不行的话,建议用户将IE升级到IE8。 表单设计中单元格对其方式设置相同,控件大小一致,但是整体显示不整齐? 删除单元格内多余的空格即可解决。 如果子流程设置了保密字段,父流程的数据还能映射到子流程吗? 可以。 子流程的数据能返回给父流程吗? 2010版可以实现此功能,之前版本不行。

数据库及SQL代码优化方案

1.1、数据库及SQL代码优化方案 (1)每周检查统计信息是否及时更新。 (2)每周检查各索引是否有效。 (3)每周检查分区是否正确。 (4)每周检查执行计划是否正确。 (5)每天检查RAC和ASM是否正常运行。 (6)每天检查相关日志是否正常备份。 (7)每天检查相关文件系统和表空间的占用率是否在国家税务总局规定的阀值以下。 (8)在每月申报高峰等业务繁忙期采样并找出消耗I/O资源和CPU资源较多的SQL语句。 (9)分析上述SQL语句,与软件服务商充分沟通后,提出优化建议。 (10)在每月申报高峰期每隔15分钟检查一次数据库连接数,发现异常及时处理。 1.1.1、系统数据库索引、表分区和对象优化方案 数据库对象的优化主要包括:表、索引和sequence等对象,通过优化对象参数、调整对象属性(例如分区表、分区索引、反转索引等等)等方法来实现对数据库对象的优化改造。 1.1.1.1表和索引并行参数优化 数据库的表和索引的并行参数值的设置对相关的sql语句的执行计划会造成影响,表和索引的degree值大于1,执行计划就偏向于使用全表和全索引扫描,另外如果并行参数值过大,短时间内也会对主机和数据库的资源造成很大的压力,因此在oltp的数据库下建议将表和索引的degree值设为1。 1.1.1.2热点大表的分区改造 对访问量很大、表的记录数很多、存在热块争用的表,可以考虑对表和索引进行适当的分区改造,分散访问压力,提高数据访问的性能。 对以下表的记录数超过1000万并且记录数持续增长的大表,建议进行分区

改造(地区+时间): 1.1.1.3分区索引的清理 对最近30天数据库分区索引访问情况进行统计,对访问次数为0的分区索引和应用部门进行确认,若确认为多余的索引,建议进行删除清理。 1.1.1.4Sequence序列优化 加大sequence 的 cache,并使用noorder选项。在RAC中经常会遇到SQ 锁等待,这是因为在RAC环境下,sequence也成为全局性的了,不同节点要生成序列号,就会产生对sequence资源的争用。而目前大多数系统中,sequence 大多数被作为主键发生器来使用,使用的频率十分高,在RAC环境中,需要设置较大的 sequence cache,否则会造成较为严重的争用,从而影响业务。 1.1.2、SQL硬解析优化方案 1.1. 2.1相关知识点介绍 1.1. 2.1.1Oracle的硬解析和软解析 Oracle对sql的处理过程:当发出一条sql语句交付Oracle,在执行和获取结果前,Oracle对此sql将进行几个步骤的处理过程: 1、语法检查(syntax check) 检查此sql的拼写是否语法。 2、语义检查(semantic check) 诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。 3、对sql语句进行解析(prase) 利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)。 4、执行sql,返回结果(execute and return) 其中,软、硬解析就发生在第三个过程里。 Oracle利用内部的hash算法来取得该sql的hash值,然后在library cache

SQL Server数据库优化方案汇总

SQL Server数据库优化方案汇总 50种方法优化SQL Server 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。 9、返回了不必要的行和列 10、查询语句不好,没有优化 可以通过如下方法来优化查询 : 1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(尺寸)越大,提高I/O越重要. 2、纵向、横向分割表,减少表的尺寸(sp_spaceuse) 3、升级硬件 4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使 用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段 5、提高网速; 6、扩大服务器的内存,Windows 2000和SQL server 2000能支持4-8G的内存。配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行 配置。运行 Microsoft SQL Server? 2000 时,可考虑将虚拟内存大小设置为计算机中安装的物理内存的 1.5 倍。如果另外安装了全文检索功能,并打算 运行 Microsoft 搜索服务以便执行全文索引和查询,可考虑:将虚拟内存大小配置为至少是计算机中安装的物理内存的 3 倍。将 SQL Server max server memory 服务器配置选项配置为物理内存的 1.5 倍(虚拟内存大小设置的一半)。 7、增加服务器 CPU个数;但是必须明白并行处理串行处理更需要资源例如内存。使用并行还是串行程是MsSQL自动评估选择的。单个任务分解成 多个任务,就可以在处理器上运行。例如耽搁查询的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并 行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作Update,Insert, Delete还不能并行处理。 8、如果是使用like进行查询的话,简单的使用index是不行的,但是全文索引,耗空间。 like 'a%' 使用索引 like '%a' 不使用索引用 like '%a%' 查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是VARCHAR。对于字段的值很长的建全文索引。 9、DB Server 和APPLication Server 分离;OLTP和OLAP分离

oraclesql优化笔记

基本的Sql 编写注意事项 尽量少用IN 操作符,基本上所有的IN 操作符都可以用EXISTS 代替。 不用NOT IN操作符,可以用NOT EXISTS或者外连接+替代。 Oracle 在执行IN 子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。NOT EXISTS:匕NOT IN效率稍高。但具体在选择IN或EXIST操作时,要根据主子表数据量大小来具体考虑。 不用“<>”或者“ !=”操作符。对不等于操作符的处理会造成全表扫描,可以用“ <” or “>”代替。 Where子句中出现IS NULL或者IS NOT NULL时,Oracle会停止使用索引而执行全表扫描。可以考虑在设计表时,对索引列设置为NOT NULL这样就可以用其他操作来取代判断NULL的操作。 当通配符“ %”或者“ _”作为查询字符串的第一个字符时,索引不会被使用。 对于有连接的列“ || ”,最后一个连接列索引会无效。尽量避 免连接,可以分开连接或者使用不作用在列上的函数替代。 如果索引不是基于函数的,那么当在Where子句中对索引列使用函数时,索引不再起作用。 Where子句中避免在索引列上使用计算,否则将导致索引失效而进行全表扫描。 对数据类型不同的列进行比较时,会使索引失效。

用“ >=”替代“ >”。 UNION操作符会对结果进行筛选,消除重复,数据量大的情况 下可能会引起磁盘排序。如果不需要删除重复记录,应该使用UNION ALL。 Oracle从下到上处理Where子句中多个查询条件,所以表连接语句应写在其他Where条件前,可以过滤掉最大数量记录的条件必须写在Where子句的末尾。 Oracle从右到左处理From子句中的表名,所以在From子句中包含多个表的情况下,将记录最少的表放在最后。(只在采用RBO 优化时有效,下文详述) Order By 语句中的非索引列会降低性能,可以通过添加索引的方式处理。严格控制在Order By 语句中使用表达式。 不同区域出现的相同的Sql 语句,要保证查询字符完全相同, 以利用SGA共享池,防止相同的Sql语句被多次分析。多利用内部函数提高Sql 效率。 当在Sql 语句中连接多个表时,使用表的别名,并将之作为每列的前缀。这样可以减少解析时间。 需要注意的是,随着Oracle 的升级,查询优化器会自动对Sql 语句进行优化,某些限制可能在新版本的Oracle 下不再是问题。尤其是采用CBO (Cost-Based Optimization ,基于代价的优化方式)时。 我们可以总结一下可能引起全表扫描的操作:

SQL数据库优化方法

SQL数据库优化方法

目录 1 系统优化介绍 (1) 2 外围优化 (1) 3 SQL优化 (2) 3.1 注释使用 (2) 3.2 对于事务的使用 (2) 3.3 对于与数据库的交互 (2) 3.4 对于SELECT *这样的语句, (2) 3.5 尽量避免使用游标 (2) 3.6 尽量使用count(1) (3) 3.7 IN和EXISTS (3) 3.8 注意表之间连接的数据类型 (3) 3.9 尽量少用视图 (3) 3.10 没有必要时不要用DISTINCT和ORDER BY (3) 3.11 避免相关子查询 (3) 3.12 代码离数据越近越好 (3) 3.13 插入大的二进制值到Image列 (4) 3.14 Between在某些时候比IN 速度更快 (4) 3.15 对Where条件字段修饰字段移到右边 (4) 3.16 在海量查询时尽量少用格式转换。 (4) 3.17 IS NULL 与IS NOT NULL (4) 3.18 建立临时表, (4) 3.19 Where中索引的使用 (5) 3.20 外键关联的列应该建立索引 (5) 3.21 注意UNion和`UNion all 的区别 (5) 3.22 Insert (5) 3.23 order by语句 (5) 3.24 技巧用例 (6) 3.24.1 Sql语句执行时间测试 (6)

1系统优化介绍 在我们的项目中,由于客户的使用时间较长或客户的数据量大,造成系统运行速度慢,系统性能下降就容易造成数据库阻塞。这是个非常痛苦的事情,用户的查询、新增、修改等需要花很多时间,甚至造成系统死机的现象。速度慢的原因主要是来自于资源不足。 数据库的优化通常可以通过对网络、硬件、操作系统、数据库参数和应用程序的优化来进行。最常见的优化手段就是对硬件的升级。根据统计,对网络、硬件、操作系统、数据库参数进行优化所获得的性能提升,全部加起来最多只占数据库系统性能提升的40%左右(我将此暂时称之为外围优化);其余大部分系统性能提升来自对应用程序的优化,对于应用程序的优化可以分为对源代码的优化及数据库SQL语句的优化。在本文档只介绍外围优化及SQL语句的优化,对于源代码的优化需要相关方面的专家,形成统一的规范。 一个数据库系统的生命周期可以分成:设计、开发和成品三个阶段。在设计阶段进行数据库性能优化的成本最低,收益最大。在成品阶段进行数据库性能优化的成本最高,收益最小。规范的代码和高性能的语句,功在平时,利在千秋。 2外围优化 1、将操作系统与SQL数据库的补丁打到最高版本,WIN2003最高补丁是SP4, SQL SERVER2000最高补丁是SP4(版本号:2039)。 2、在服务器上不要安装与VA程序任何无相关的软件,甚至一些与VA运行 无关的服务都可以停掉。一般只安装SQL数据库、VA服务端服务及杀毒 软件。 3、杀毒软件避免对大文件进行扫描,特别是数据库(MDF和LDF)文件,一 定要从杀毒软件的范围内排除掉。 4、在进行服务器分区时,分区不要太多,两三个分区就可以了。分区最好 都使用NTFS格式。

OracleSQL性能优化方法

OracleSQL性能优化方法 Oracle性能优化方法(SQL篇) (1) 1综述 (2) 2表分区的应用 (2) 3访咨询Table的方式 (3) 4共享SQL语句 (3) 5选择最有效率的表名顺序 (5) 6WHERE子句中的连接顺序. (6) 7SELECT子句中幸免使用’*’ (6) 8减少访咨询数据库的次数 (6) 9使用DECODE函数来减少处理时刻 (7) 10整合简单,无关联的数据库访咨询 (8) 11删除重复记录 (8) 12用TRUNCATE替代DELETE (9) 13尽量多使用COMMIT (9) 14运算记录条数 (9) 15用Where子句替换HA VING子句 (9) 16减少对表的查询 (10) 17通过内部函数提高SQL效率 (11) 18使用表的不名(Alias) (12) 19用EXISTS替代IN (12) 20用NOT EXISTS替代NOT IN (13) 21识不低效执行的SQL语句 (13) 22使用TKPROF 工具来查询SQL性能状态 (14) 23用EXPLAIN PLAN 分析SQL语句 (14) 24实时批量的处理 (16)

1综述 ORACLE数据库的性能调整是个重要,却又有难度的话题,如何有效地进行调整,需要通过反反复复的过程。在数据库建立时,就能依照顾用的需要合理设计分配表空间以及储备参数、内存使用初始化参数,对以后的数据库性能有专门大的益处,建立好后,又需要在应用中不断进行应用程序的优化和调整,这需要在大量的实践工作中不断地积存体会,从而更好地进行数据库的调优。 数据库性能调优的方法 ●调整内存 ●调整I/O ●调整资源的争用咨询题 ●调整操作系统参数 ●调整数据库的设计 ●调整应用程序 本文针对应用程序的调整,来讲明对数据库性能如何进行优化。 2表分区的应用 关于海量数据的表,能够考虑建立分区以提高操作效率。建立分区一样以关键字为分区的标志,也能够以其他字段作为分区的标志,但效率不如关键字高。建立分区的语句在建表时能够进行讲明: create table TABLENAME() partition by range (PutOutNo) (partition PART1 values lessthan (200312319999) partition PART2 values lessthan (200412319999) 。。。。。。 如此,在进行大部分数据查询,数据更新和数据插入时,Oracle自动判定操作应该在哪个分区进行,幸免了整表操作,提高了执行的效率

工作流表单引擎系统

表单系统设计 一、目的 表单定义:表单是用来呈现与存储数据的图形化界面,数据展现、数据存储、用户交互的工具。我们用火车来比喻,数据就是货物、表单就是车厢、火车头就是工作流程引擎。 自定义表单设计器,采用数据库格式化存储表单模板。 二、实现原理 自定义表单功能概括起来如下 1、表单预览,动态报表展示(列表数据展示) 2、表单数据填报, 3、支持多数据表同时填报,一对多数据表填报,单表多条数据批量填报等 4、自定义表单支持用户自定义模板 5、大量丰富的标准表单控件 三、目标 1、新建表单(需要关联流程id,表单关联实例,历史版本)。 2、表单预览。

3、主表单和子表单相关属性管理。 4、表单字段关联表单控件。 5、实现表单模型自动布局。 6、实现表单模板与数据结合渲染控制。 7、通过表单的定义自动创建/修改自定义数据表。 四、功能实现 4.1、表单定义管理 表单基本信息管理(表单名称、描述)、表单存储表字段管理、表单布局设计、表单数据验证定义、表单字段关联/子表单管理、表单字段编辑框行为管理,表单基本信息定义。 4.2、表单存储表字段定义 定义表单中用到的数据项,包括字段名、字段类型、长度、默认值、编辑框类型、是否允许为空、是否自增长字段、分组名称、是否在列表中显示等信息。编辑框类型一般有:文本框、文本域、复选框、单选框、列表框、时间日期选择、文件上传框等;这里定义的是表单主表字段,注意每张表单仅针对一张表,否则操作多张表的SQL不容易处理,涉及到主从表的情况可用子表单来处理。 4.3、表单布局设计 能够提供一个表单设计器。 自定义表单,有可视化表单设计界面,直接采用拖、拉、点、拽的方式来设计表单。 常见的数据获取保存等等,直接用页面构件,不需要用户写代码就能完成(有时候简单的sql语句还是需要写)。 4.4、表单数据验证定义 定义需要验证字段的规则,验证规则,可用正则表达式的方式来定义,系统内部可自带一些常用的验证规则,复杂的情况可能会出现各字段之间的值进行比较的情况。 比如判断空,是否数字,取值范围判断,是否日期,是否电话号码,省份证验证,汉字验证,等等多样的验证。 1、条件校验, 2、基础类型校验 3、逻辑表达式校验 4.5、表单字段关联/子表单管理 定义表/表单之间的关联信息,即主键外键信息。 4.6、表单字段编辑框行为定义 主要负责处理字段值发生变化时引发的其他编辑框事件,比如连动下拉框、从选择值中返回值并赋予其他字段编辑框、其他编辑框的隐藏等。 4.7、表单数据管理: 可根据字段配置信息显示表单的数据列表,并进行管理。

SQL2019系统性能优化解决方案共12页文档

SQL Server 系统性能调优解决方案 前言 近几年,医药流通市场经历了激烈的震荡,导致行业逐步成熟和企业的快速变革,差异化经营成为众多医药流通的竞争选择。时空产品在中国医药流通企业的发展过程中得到了广泛且深入应用,大量的客户化开发和定制支撑了企业管理中横向和纵向的变化,很好的适应了企业在发展过程中不断变化的需求。 对于数据库管理系统的使用,很多用户都面临着一个很棘手的问题:系统效率下降。产生效率下降的因素是多方面: 1.硬件问题 2.软件问题 3.实施问题 正因为产生效率下降的因素很多,所以如何去查找原因成为我们首要关注的问题,时空公司也处在积极探索过程中。时空公司在解决一些客户问题的过程中积累了一些方法和思路,归纳总结后呈现给体系内的技术人员,本方案就系统效率调整所必需的基础知识、方法、技巧等几个方面进行阐述,从而让技术人员能够快速定位问题,解决问题,为合作伙伴提供优质,快捷的服务。 索引简介 索引是根据数据库表中一个或多个列的值进行排序的结构。索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。数据库使用索引的方式与使用书的目录很相似,通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。 索引键:用于创建索引的列。 索引类型 ?聚集索引: 聚集索引基于数据行的键值在表内排序和存储这些数据行。由于数据行按基于聚集索引键的排序次序存储,因此聚集索引对查找行很有效。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。数据行本身构成聚集索引的最低级别(叶子节点)。只有当表包含聚集索引时,表内的数据行才按排序次序存储。如果表没有聚集索引,则其数据行按堆集方式存储。 聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如:如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。 ?非聚集索引 非聚集索引具有完全独立于数据行的结构。非聚集索引的最低行包含非聚集索引的键值,并且每个键值项都有指针指向包含该键值的数据行。数据行不按基于非聚集键的次序存储。如

工作流绘制

Maximo工作流绘制 类别maximo Maximo它是一个平台,用户可以标准实施也可以定制进行二次开发。Maximo为二次开发提供了几样非常实用的工具:数据库配置、应用程序设计器、域、基类、工作流设计器。其中工作流设计器也是非常实用的工具,它为企业业务重组提供了极大的方便。 一、认识画布 工作流设计器的画布上有很多东东,来认识下吧! 按照业务流程绘制工作流程,配置节点、操作等设置。 点击【转到】——【配置】——【工作流】——【工作流设计器】,进入工作流设计器,在该页面中绘制工作流和配置节点、操作等设置。 注意:已经激活的工作流程不能再更改,只能创建新的过程修订本后在新的修订本中进行修改。 简单示例流程:

二、配置节点、操作等设置 1.开始和结束节点不能改变任何设置; 2.给任务节点分配角色、通讯模板: 3.条件判断节点配置: 表达式:根据该条件表达式满足与否来控制流程流向。表达式可以根 据表达式构建器

4.手工节点配置: 5.子流程节点配置: 6.交互节点配置: 7.操作(连接线)配置: 三、验证、启用和激活工作流 工作流绘制后,需验证、启用和激活才能用。验证会检查绘制的工作流各节点和操作流程走向及判断条件是否合理。

绘制好后的工作流程必须经过下述过程: 1.验证过程:系统验证定制的过程是否符合设计规范。 2.启用过程:使过程能够使用。要使过程处于非启用状态,需先使过程处于非激活状态。如果有父过程引用该过程,则先需使其父过程处于非启用状态。 3.激活过程:使过程处于活动状态。 4. 添加工作流到应用程序:在应用程序的操作菜单中添加工作流菜单。 四、如何启用有子流程的流程? 有子流程的流程比较特殊,它要先绘制好子流程并验证、启用和激活,这时子流程可以用了,但在走流程时会出现提示,让你选择流程。有子流程的应该一般发生如【工单跟踪】这样的应用里,【工单跟踪】将电气工作票、机械工作票、动火票、倒闸操作票等应用的单据集合在一起,它从一个父流程开始,然后判断是电气工作票还是机械工作票还是动火票还是倒闸操作票,如果是电气工作票则调用电气工作票子流程。 要正常配置好父子流程: 1.先找到主流程(即上面说的【工单跟踪】的流程),再转到【选择操作】-【“编号工作至”按钮】

工作流系统功能介绍简化版

工作流系统功能介绍 目录 1概述 (2) 2流程系统设计总图 (4) 3建模工具 (4) 3.1组织机构管理 (5) 3.1.1主界面 (6) 3.1.2岗位管理界面 (7) 3.1.3部门管理界面 (8) 3.1.4员工管理界面 (9) 3.2权限管理 (10) 3.2.1主界面 (11) 3.2.2权限组管理界面 (12) 3.2.3权限设置界面 (14) 3.3流程管理 (14) 3.3.1流程管理主界面 (15) 3.3.2启动节点配置界面 (15) 3.3.3处理者配置界面 (19) 3.3.4流转条件配置界面 (19) 3.3.5控制节点配置界面 (20) 3.3.6子流程节点配置界面 (21) 3.4表单管理 (21) 3.4.1表单管理主界面 (22) 3.4.2选择用户控件界面 (23)

4工作流引擎 (23) 4.1基本功能 (23) 4.2任务节点类型 (25) 4.2.1启动节点 (25) 4.2.2结束节点 (26) 4.2.3交互节点 (26) 4.2.4子流程节点 (26) 4.2.5控制节点 (26) 4.2.6查看节点 (26) 5业务平台 (26) 5.1业务平台主界面 (27) 5.2例子:差旅费报销流程 (27) 5.3未认领任务 (29) 5.4已认领任务 (30) 5.5已完成任务 (30) 5.6查看流程图 (30) 6与门户sps系统的整合 (31) 7流程监控服务系统(即时消息和Email) (32) 1概述 随着计算机软件应用的普及,信息化系统发挥的作用也越来越大,企业信息化建设的不断深入,对系统功能和自动化程度要求越来越高。客户要求系统功能与实际的工作情景紧密结合,对每个业务环节的控制要求越来越精确。如何让我们的信息化系统更加贴近客户需求,满足客户不断变化的业务流程成了我们软件开发商不得不面对的问题。

sql优化方案讲解

Sql优化方案 一.数据库优化技术 1.索引(强烈建议使用) 1.1优点 创建索引可以大大提高系统的性能。 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 1.2 缺点 第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 1.3 使用准则 索引是建立在数据库表中的某些列的上面。因此,在创建索引的时候,应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引。 一般来说,应该在这些列上创建索引。 第一,在经常需要搜索的列上,可以加快搜索的速度;

第二,在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; 第三,在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;第四,在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; 第五,在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间; 第六,在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。 同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点: 第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。 第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。 第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。 第四,当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。 1.4 总结 1)索引提高了数据库的检索性能,但一定程度上牺牲了修改性能。因此适用于“多查询少修改”(insert,update,delete)的表。 2)对此类表中的外键,需要分组,排序或作为检索条件的字段建立索引 3)对此类表中查询使用少,字段取值少,字段数据量大的不应创建索引

PeopleSoft工作流配置

AWE: STEP BY STEP 概述 该文档描述一个简单的AWE配置流程,所有步骤均采用最简单而有代表性的配置。 为了更详细地描述一个AWE例子程序的编写过程,该文档将完成一个简单的费用报告报销需求,具体需求描述如下: 1、提供一个页面供员工输入费用报告明细,包括时间、金额、用途等; 2、提供一个页面供经理审批费用报告,审批是需要显示费用报告明细; 3、根据费用报告中的金额,确定如下审批规则:金额小于500,只需部门经理审批, 金额超过500时,部门经理审批后,还需副总裁审批;所有审批人审批完成后,费用报告的状态变为“已审批”,后续操作省略。 开发说明 该文档技术来源:Approval Workflow Engine (AWE) for HCM 9.0(HCM Shared Components Team)。 该文档技术平台:PT8.50+FSCM9.1+Oracle。如果在HCM环境中开发,如果EOAW_开始的对象不存在,均可找到一个PTAFAW_或者PTAF_开始的相对应的对象代替。 所有PeopleCode和SQL语句均在附录中。 具体步骤 一、创建许可权列表、角色、用户概要 根据需求描述,设置三个许可权列表,分别代表员工、部门经理、副总裁;设置三 个角色,分别包含三个许可权列表;再设置三个测试用户分别代表三种角色,每个 用户概要需要绑定一个员工ID。用户权限设置如下图: 用户概要角色许可权列表 XTEST1 X_1010(Employee) X_1010 XTEST2 X_1020(Department Manager) X_1020 XTEST3 X_1030(Vice President) X_1030 注:为了避免测试过程中出现其他与AWE无关错误,建议以上三个用户概要从VP1 拷贝,再加上相应角色。 二、创建基础Project 1.创建Record 该步骤创建的Record如下:

Oracle_SQL规范与优化

1.性能优化 ●【规则6】尽量避免相同语句由于书写格式的不同,而导致多次语法分析。 ●【规则7】尽量使用共享的SQL语句,也就是说,在SQL中尽量采用绑定变量的方式, 而不是常量; ●【规则8】尽量不使用“SELECT *”这样的语句,即使需要查询表中的所有行,也需列 出所有的字段名; ●【规则9】尽量避免4个以上表的链表操作,例如:A = B and B = C and C = D,如果业务 上需要,可以考虑通过中间表的方式进行变通; ●【规则9】大量的排序操作影响系统性能,所以尽量减少order by和group by排序操作。 如必须使用排序操作,请遵循如下规则: (1)排序尽量建立在有索引的列上。 (2)如结果集不需唯一,使用union all代替union。 ●【规则10】系统可能选择基于规则的优化器,所以将结果集返回数据量小的表作为驱 动表(from后边最后一个表)。 说明:驱动表的选择和很多的因素有关系,不仅仅是表的顺序,这点仅做参考,不过养成这个习惯有助于以后进行SQL的优化。 ●【规则11】索引的使用。 (1)尽量避免对索引列进行计算。 (2)尽量注意比较值与索引列数据类型的一致性,避免使用数据库的类型自动转换功能 (3)对于复合索引,SQL语句必须使用主索引列 (4)索引中,尽量避免使用NULL。 (5)对于索引的比较,尽量避免使用NOT=(!=) (6)查询列和排序列与索引列次序保持一致 ●【规则12】查询的WHERE过滤原则,应使过滤记录数最多的条件放在最前面。 ●【规则13】使用%TYPE、%ROWTYPE方式声明变量,使变量声明的类型与表中的保持同 步 ●【规则14】在IF/ELSE查询中,使用DECODE ●【规则15】在SQL 中使用WHERE 子句过滤数据,而不是在程序中到处使用它进行过 滤 ●【规则16】执行动态SQL,建议用execute immediate SQL子句; ●【规则17】尽量避免使用union,若需要排重,建议使用from 子句把查询结果union all 起来后,再通过group by 排重, 如: SELECT id FROM ( SELECT id FROM a UNION ALL SELECT id

相关主题
文本预览
相关文档 最新文档