版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、。数据库优化方案1.高效地设计SQL语句:通常,可以使用以下方法来优化数据操作的SQL性能:(1)减少对数据库的查询次数,即减少对系统资源的请求。使用分布式数据库对象(如快照和渲染)可以减少对数据库的查询数量。(2)尽量使用相同或非常相似的SQL语句进行查询,这不仅充分利用了SQL共享池中解析后的语法树,而且大大增加了要查询的数据在SGA命中的可能性。(3)避免无条件执行SQL语句。当执行不带任何条件的SQL语句时,通常会执行FTS。数据库首先定位一个数据块,然后依次查找其他数据,这对于大型表来说是一个漫长的过程。(4)如果对某些表中的数据有约束,最好用描述性完整性来实现正在构建的表的SQL语
2、句,而不是使用SQL程序。1.操作员优化:1.输入运算符用语言编写的SQL的优点是编写简单明了,更适合现代软件开发的风格。然而,带输入的SQL的性能总是很低。从Oracle执行的步骤来看,带输入的SQL和不带输入的SQL之间存在以下差异:ORACLE试图将其转换成多个表的连接。如果转换不成功,请先在in中执行子查询,然后查询外层的表记录。如果转换成功,直接使用多表连接模式进行查询。可以看出,带输入的SQL至少还有一个转换过程。常规SQL可以成功转换,但带有分组统计的SQL不能转换。尽量不要在业务密集型的SQL中使用输入运算符。在优化sql时,我们经常会遇到在中使用的语句,所以我们必须用exis
3、ts替换它,因为Oracle以Or的方式处理in,即使它使用索引,速度也会很慢。2.不在操作员中不建议使用强列,因为它无法应用表的索引。替换为不存在或(外部连接判断为空)方案3.为空或非空操作通常,判断字段是否为空不会应用索引,因为B树索引不索引空值。相反,对于同一函数的其他操作,a不为空将被更改为a0或a ,等等。该字段不允许为空,但使用默认值代替空值。例如,业务扩展应用程序中的状态字段不允许为空,默认值为应用程序。避免在索引列上使用“为空”和“不为空”。避免在索引中使用任何可为空的列,否则ORACLE将无法使用该索引。对于单列索引,如果列包含空值,则该记录将不存在于索引中。对于复合索引,如
4、果每一列都为空,则该记录也不会存在于索引中。如果至少有一列不为空,则该记录存在于索引中。例如,如果唯一索引建立在表的A和B列上,并且表中有一条记录的A和B值为(123,空),则ORACLE将不接受下一条具有相同A和B值的记录(123,空)(插入)。但是,如果所有索引列都为空,ORACLE将认为整个键值为空,这不等于空.因为索引列中不存在空值,所以在WHERE子句中比较索引列的空值将导致ORACLE禁用索引。低效率:(索引失败)从部门代码不为空的部门中选择;高效:(索引有效)从部门中选择其中部门代码=0;4、和运算符(大于或小于运算符)一般来说,大于或小于的运算符不需要调整,因为如果它有索引,就
5、会按索引进行搜索,但在某些情况下可以进行优化,例如一个表有100万条记录,一个数字字段为A,一条记录有300,000条记录A=0,300,000条记录A=1,390,000条记录A=21,000条记录A=3。那么执行A2的效果与执行A=3的效果有很大不同,因为当A2被执行时,ORACLE将首先找到记录索引2,然后进行比较,而当A=3时,ORACLE将直接找到记录索引=3。替换为=高效:从部门中选择其中部门代码=0;低效率:从EMPWHERE DEPTNO 3中选择*它们之间的区别在于,前者的数据库管理系统将直接跳转到第一条记录,其中DEPT等于4,而后者将首先定位DEPT编号=3的记录,并向前
6、扫描到DEPT大于3的第一条记录。5.喜欢的操作员:通配符查询可以应用于LIKE运算符,其中通配符的组合几乎可以是任意的。但是,如果使用不当,将会导致性能问题。例如,像“t00%”这样的词不会引用索引,但像“x5400%”这样的词会引用范围索引。一个实际的例子:在YW_YHJBQK表中,可以使用业务号之后的账户识别号来查询业务号YY _ BH,如“t00%”,这将产生一个全表扫描。如果更改为YY _ BH,如 x5400% 或YY _ BH,如 b5400% YY_BH的索引将用于两个范围的查询,性能肯定会有很大的提高。6.将DISTINCT替换为EXISTS:提交包含一对多表信息(如部门表和
7、员工表)的查询时,请避免在SELECT子句中使用DISTINCT。通常,我们可以考虑用EXIST替换它,这样可以加快查询速度,因为RDBMS核心模块会在满足子查询的条件后立即返回结果。示例:(低效):从部门D中选择不同的部门号,部门名,此处为部门号=部门号(高效):从存在的部门中选择部门编号、部门名称(从环境管理计划中选择此处的部门编号=部门编号);例如:用存在替换为,用不存在替换为:在许多基于基本表的查询中,为了满足一个条件,通常需要外连接另一个表。在这种情况下,使用EXISTS(或NOT EXISTS)通常会提高查询效率。在子查询中,非输入子句将执行内部排序和合并。在任何情况下,“不在”都
8、是效率最低的(因为它对子查询中的表执行完整的表遍历)。为了避免使用不输入,示例:(高效):从EMP(基本表)中选择EMPNO和存在的位置(从部门选择,部门=环境管理计划。DEPTNO和LOC=MELB)(低效):*从EMP(基本表格)中选择,其中EMPNO和DEPTNOIN(选择DEP交通运输部,其中LOC=MELB)7.用联合替换或(适用于索引列)一般来说,用UNION代替WHERE子句中的OR会有更好的效果。对索引列使用或将导致全表扫描。请注意,上述规则仅对多个索引列有效。如果有未编制索引的列,查询效率可能会降低,因为您没有选择或。在下面的例子中,LOC_ID和REGION都有索引。(高效
9、):从锁定标识=10的位置选择锁定标识、锁定DESC、区域从地区=墨尔本的位置,联合选择地区标识,地区DESC(低效):从位置选择锁定标识、锁定DESC、区域,其中锁定标识=10或区域=墨尔本如果您坚持使用或,您需要返回记录最少的索引列,并将其写在前面。8.将或替换为输入这是一个简单易记的规则,但是实际的执行效果需要检查。在ORACLE8i下,两者的执行路径似乎是相同的。低效率:选择从锁定标识=10或锁定标识=20或锁定标识=30的位置高效:从锁定位置选择(10,20,30);二、SQL语句结构优化1.避免在SELECT子句中使用“* ”:2.将删除替换为截断:使用TRUNCATE代替DELE
10、TE删除所有表记录:(对于具有大数据量的表的子方法)删除表中的记录时,通常使用回滚段来存储可以恢复的信息。如果没有COMMIT事务,ORACLE会将数据恢复到删除前的状态(确切地说,恢复到执行删除命令前的状态),而当使用TRUNCATE时,回滚段不再存储任何可恢复的信息。3.将HAVING子句替换为Where子句:避免使用HAVING子句。HAVING仅在检索到所有记录后过滤结果集。这个过程需要分类、合计和其他操作。如果记录的数量能够受到WHERE条款的限制,这方面的成本就能够降低。(在非oracle中)在三个条件子句中,on、where和having、on先执行,然后是where。最后,因为
11、在进行统计之前对不合格记录进行过滤,所以可以减少在中间操作中要处理的数据。可以合理地说,速度应该是最快的,而且应该比拥有更快4.大写sql语句因为oracle总是先分析sql语句,然后在执行前将小写字母转换成大写字母。5.在Java代码中尽量少用连接器“”连接字符串!6.避免改变索引列的类型。比较不同数据类型的数据时,ORACLE会自动对列执行简单的类型转换。假设EMPNO是数值类型的索引列。从EMP中选择实际上,在ORACLE类型转换后,语句被转换为:从EMP中选择其中EMPNO=TO_NUMBER(123)幸运的是,类型转换没有发生在索引列上,索引的目的也没有改变。现在,假设EMP_TYP
12、E是字符类型的索引列。从电磁脉冲中选择其中电磁脉冲类型=123该语句被ORACLE转换为:从电磁脉冲中选择至_号(电磁脉冲类型)=123由于内部类型转换,将不使用此索引!为了避免ORACLE对您的SQL进行隐式类型转换,最好是显式表达类型转换。请注意,当字符与数值进行比较时,ORACLE会优先将数值转换为字符类型7.通过:优化组为了提高GROUP BY语句的效率,可以在GROUP BY之前过滤掉不必要的记录。以下两个该查询返回相同的结果,但是第二个结果显然要快得多。低效率:1从环境管理小组中选择工作,AVG(萨尔)按工作职位=总裁或工作职位=经理高效:1从环境管理计划中选择工作,AVG(萨尔)
13、,其中工作=总裁工作=经理组工作数据库优化方案1.使用表分区分区在物理上分离数据,不同分区的数据可以被公式化并存储在不同磁盘上的数据文件中。这样,当查询这个表时,只需要扫描表分区,而不是扫描整个表,这明显缩短了查询时间。此外,不同磁盘中的分区也将数据传输分配到该表的不同磁盘输入/输出中,精心设置的分区可以将数据传输平均分配到磁盘输入/输出竞争中。这种方法可用于包含大量数据的时间表。可以每月自动创建表分区。2.别名的使用别名是大规模数据库的应用技巧,即在查询中表名和列名用一个字母进行别名,查询速度比建立连接表快1.5倍。3.指数指标的优化设计索引可以大大加快数据库的查询速度。索引将表中的逻辑值映
14、射到安全的RowID,因此索引可以快速定位数据的物理地址。当使用索引查询大型表时,索引数据可能会耗尽所有块缓存空间,ORACLE必须频繁读写才能获取数据。因此,在对大型表进行分区后,可以根据相应的分区建立分区索引。然而,我个人认为并不是所有的表都需要索引,而是只有数据量大的表才需要索引。缺点:首先,创建和维护索引需要时间,这随着数据量的增加而增加。其次,索引需要占用物理空间。除了数据表,每个索引还需要占用一定的物理空间。如果要建立聚集索引,所需的空间会更大。第三,在添加、删除和修改表中的数据时,需要动态维护索引,降低了数据维护的速度。需要维护索引:为了维护系统性能,在创建索引后,由于频繁的添加、删除和修改数据等操作,索引页被分割,因此必须维护索引。调整硬盘输入/输出这一步是在信息系统开发之前完成的。数据库管理员可以将构成相同表空间的数据文件放在不同的硬盘上,以平衡硬盘之间的输入输出负载。当磁盘丰富时,还应遵守以下原则:把表格和索引分开;l创建用户表空间,并将磁盘与系统表空间分开;l在创建表和索引时指定不同的表空间;为回滚段创建一个特殊的表空间,以防止空间竞争影响事务的完成;l为排序操作创建临时表空间,以尽可能防止数据库碎片存在于多个表空间中。在使用物化视图的过程中,我们基本上可以“将其视为一个实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第7课《散文诗二首-金色花》导学单 2025-2026学年统编版语文七年级上册(学案)
- 配电室安全管理与操作规范培训
- 2026年医疗影像诊断数据合作合同协议
- 验电接地制度培训课件
- 炼铁厂设备档案管理制度培训
- 空压机工安全生产职责培训课件
- 2026年广西农业职业技术大学单招职业技能测试题库带答案详解(b卷)
- 重特大突发事件上报制度培训
- 2026年山西经贸职业学院单招职业倾向性考试题库附答案详解(能力提升)
- 2026年广西国际商务职业技术学院单招职业技能测试题库含答案详解(a卷)
- 2026春人教版(新教材)小学美术二年级下册《设计小名师》教学设计
- 国新控股(雄安)有限公司相关岗位招聘11人笔试参考题库及答案解析
- 2026小学教师资格证考试《综合素质》能力测试试题含答案
- (2026版)子宫颈上皮内瘤变2级(CIN2)管理中国专家共识解读课件
- 2026年Q3新媒体热点营销:开学季内容策划与用户触达
- 【模板】洁净厂房和设施验证报告
- 国家糖尿病基层中医防治管理指南(2025版)
- 北京协和医学院攻读医学科学(理学)硕士学位研究生培养方案
- 船舶绿色制造技术
- 2026年安徽林业职业技术学院单招(计算机)考试参考题库附答案
- 安全环境职业健康法律法规文件清单(2025年12月版)
评论
0/150
提交评论