1.from后边数据少表的放在右边(转)
原因:ORACLE在解析sql语句的时候对FROM子句后面的表名是从右往左解析的,是先扫描最右边的表,然后在扫描左边的表,然后用左边的表匹配数据,匹配成功后就合并,所以,在对多表查询中,一定要把小表写在最右边
--No.1 tableA:100w条记录 tableB:1w条记录 执行速度十秒
select count(*) from tableA, tableB;
--No.2 执行速度百秒甚至更高
select count(*) from tableB, tableA;
FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表.
2.where过滤行数多的列放在右边(转)
原因:ORACLE对where子句后面的条件过滤是自下向上,从右向左扫描的,WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响,如
Select * from zl_yhjbqk where dy_dj = '1KV以下' and xh_bz=1
Select * from zl_yhjbqk where xh_bz=1 and dy_dj = '1KV以下'
以上两个SQL中dy_dj(电压等级)及xh_bz(销户标志)两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV以下'条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的时候99%条记录都进行dy_dj及xh_bz的比较,而在进行第二条SQL的时候0.5%条记录都进行dy_dj及xh_bz的比较,以此可以得出第二条SQL的CPU占用率明显比第一条低。
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
3.select 少用 * 够用就行
原因:使用select的时候少用*,多敲敲键盘,写上字段名吧,因为ORACLE的查询器会把*转换为表的全部列名,这个会浪费时间的,所以在大表中少用
4.能用链接查询绝对不用子查询
原因:因为子查询的底层就是链接查询,用子查询效率低
5.合理使用索引提升效率(索引的本质是提高效率的机制,本质上是一棵树)
原因:(1)为经常出现在where子句中的列创建索引
(2)为经常出现在order by,distinct 中的字段建立索引
(3)不要在经常DML的操作的表上建立索引(影响dml操作,任何dml操作都会更新index ,会引起索引不准,解决方法:rebuild重新建立)
(4)不要在小表上建立索引(因为索引会占用空间 )
(5)限制表上的索引数量,索引并不是越多越好(需要额外维护,执行计划会浪费更多的资源)
6.少用in,多用exists来代替
原因: --NO.1 IN的写法
SELECT * FROM TABLEA A WHERE
A.ID IN (SELECT ID FORM TABLEB B WHERE B.ID>1)
--NO.2 exists 写法
SELECT * FROM TABLEA A WHERE
EXISTS (SELECT 1 FROM TABLEB B WHERE A.ID=B.ID AND B.ID>1)
关于上篇的原因基本上就是这些,但是小编在查询的过程中发现了好多大神写的文章,下面将连接奉上,大家可以看看大神们是如何优化的:
MySQL性能优化的最佳经验:
http://www.jianshu.com/p/5dd73a35d70f
MYSQL 索引优化全攻略:
http://www.dev120.com/archives/50
关于数据库的水平切分和垂直切分的一些概念:
http://www.cnblogs.com/zr520/p/5449748.html
SQL多表查询优化 高效率SQL语句 11条原则:
http://blog.csdn.net/killer_zr/article/details/7664024
Oracle语句优化:
http://m.educity.cn/wenda/389092.html
相关推荐
### ORACLE中SQL查询优化技术 #### 一、引言 在现代企业级数据库应用中,Oracle数据库因其高性能、高可靠性和丰富的功能被广泛采用。然而,在实际的应用场景下,即使是设计良好的数据库系统也可能因为查询效率低下...
### Informix数据库SQL查询优化 在数据库管理领域中,SQL查询优化是一项至关重要的技术,它直接影响到系统的响应时间和资源消耗。对于Informix数据库而言,掌握有效的SQL查询优化技巧尤为重要,尤其是在进行单表...
在IT行业的数据库领域,SQL查询优化是至关重要的技术点,特别是在大数据量处理和高并发场景下,优化SQL查询可以显著提升系统的性能和响应速度。本文将深入探讨SQL查询优化的关键知识点,包括常见的优化策略、查询...
SQL性能描述 优化SQL SQL数据分区
本文将详细介绍SQL查询优化的策略和技巧,并通过实例代码展示如何提升查询性能。 SQL查询优化是一个持续的过程,需要对数据库系统有深入的了解和细致的调整。通过本文的探讨,我们了解到了查询优化的重要性、执行...
【Oracle中SQL查询优化研究】 在Oracle数据库管理系统中,SQL查询优化是提升整体数据库性能的关键环节。由于数据库规模日益庞大,结构复杂,SQL查询的效率直接影响到应用的响应时间和资源消耗。本文深入探讨了SQL...
时间都去哪儿了 - 深入学习SQL查询优化 在本节中,我们将深入探讨 SQL 查询优化的相关知识点。SQL 查询优化是数据库性能优化的关键步骤,旨在提高数据库的查询效率和性能。 查询执行过程 查询执行过程是 SQL 查询...
关系代数与SQL查询优化是数据库管理和性能提升中的重要研究领域。由于数据库查询性能对于系统整体运行效率有着决定性的影响,因此查询优化技术一直是数据库领域研究的热点。查询优化技术中,关系代数作为处理关系...
SQL Server 2005 SQL查询优化主要关注的是如何提高查询效率和解决死锁问题。在SQL Server 2005中,优化SQL查询对于提升数据库系统的整体性能至关重要。本篇内容介绍了几个关键的工具和技术,包括SQL Server Profiler...
除了索引和查询语句优化,Oracle数据库还提供了一系列的高级特性和工具来帮助开发者和数据库管理员进行SQL查询优化。例如,使用Oracle的SQL优化器,可以自动选择最有效的执行计划来运行SQL语句。此外,Oracle数据库...
Oracle数据库的SQL查询优化是提高系统运行效率的关键所在。在当前广泛应用的Oracle数据库系统中,SQL查询的高效执行直接影响到整体性能。本文将深入探讨几种常见的Oracle数据库性能优化技术,并重点讲解SQL查询优化...
综上所述,SQL查询优化技术的合理运用对于提升数据库系统性能至关重要。本文通过分析SQL语句的特性、优化问题的提出、优化策略以及具体的优化方法,为数据库设计者和开发者提供了指导,帮助他们编写出高质量的SQL...
### Oracle数据库SQL查询优化研究 #### 研究背景与意义 Oracle数据库作为目前应用最广泛的大型数据库之一,其查询性能对于系统的整体运行效率至关重要。随着数据量的增加,如何提升数据库的查询性能成为了亟待解决...
【基于MapReduce的SQL查询优化分析】 SQL查询在传统的关系型数据库中被广泛使用,它是一种结构化查询语言,能够方便地执行数据的增、删、改、查操作。然而,在分布式数据库系统如HBase中,由于其底层依赖Hadoop的...
SQL查询优化是数据库管理系统中至关重要的一环,它旨在提高数据查询和处理的效率,降低资源消耗,提升系统性能。SQL优化主要包括SQL命令的书写技巧和使用优化工具两个方面。 首先,SQL命令书写技巧是优化的基础。在...
SQL查询优化技术是数据库性能管理中不可或缺的一部分,尤其是面对大规模数据和复杂查询操作时。Informix数据库作为一款成熟的数据库管理系统,提供了一系列查询优化工具和策略,使得数据库管理员能够提升查询执行...
以下将针对ORACLE数据库中SQL查询优化技术进行详细阐述。 首先,了解影响SQL查询性能低下的常见原因至关重要。这些问题可以大致分为以下四类:1)在大记录集上执行高成本操作,比如使用排序谓词等;2)过多的I/O操作...
《数据库SQL查询优化方法的研究》 SQL查询是数据库操作的核心,其效率直接影响到系统的整体性能。在实际应用中,不恰当的SQL语句可能导致数据库响应时间显著增加,从而降低用户体验。据统计,大部分性能问题源于...