地址:http://blog.csdn.net/fertiland/archive/2007/07/12/1687008.aspx
1 有两个表,A表800多万,B表900多万,这两个表要做关联查询,没有GROUP BY等操作,只是普通的查询,如何提高速度?
[1]把能限制范围最小的条件放在最前面,此条件对应的列加一下索引
[2]尽量把Where后面给出的条件所要用的字段建立索引,
避免使用like, 避免在where中使用is null或者is not null,
另外,先要限制从两张表取的数据,最后才写两表关联的字段(两表连接的条件)
[3]索引是提升速度的关键。可以考虑分成几个查询,每个查询对应一个最佳的索引
[4]强制索引;少用IN,用EXISTS;可以的话,多建临时表;
[5]技术上提高查询办法:建立合适的索引,避免用影响查询速度的条件,比如in、%等,如果可以作partition的,就作
partition,尽量分段查询。
两个大表关联查询,属于业务问题:数据量巨大,本身就是很费时间的事。像移动、电信,基本上不给打印1年的帐单,就是避免数度太慢影响业务。
[6]关键看你做什么样的关联操作,where条件很重要(是否用了in/not
in,like等条件),还有是否用了union(因为union all 的执行要比union快很多)
[7]关键字建立索引
ID采用LONG型而不采用varchar,对于海量数据的查询可以提速很多
其它的,有待楼下进一步提供
[8]表空间分配合理,回滚段空间分配250M左右
[9]建立索引之后 分批查询
[10]优化查询条件,应该是比较实际的办法,将返回的结果缩小在最小的范围内的查询放到前面,依次
[11]应先进行表空间的优化,回滚段的优化,索引优化,再进行查询语句的优化
如果还是不行可试试建个视图,建立视图快照
2 Transitive predicate generation
如果想查出某一段时间的有效的单据中(或者某些产品)的明细资料,一般的做法:
select 所需字段
from detail_tab a,main_tab b
where a.prod_id = b.prod_id
and a.yyyymmdd = b.yyyymmdd
and a.paper_no = b.paper_no
and a.io = b.io
and b.yyyymmdd = 指定日期
and a.io = 进仓
and b.code = 有效的;
这个查询的速度会因为这两个表过于巨大而非常的缓慢,
现在有一个解决办法,就是给两个表都加上条件,即使是两个表关联的字段也加:
select 所需字段
from detail_tab a,main_tab b
where a.prod_id = b.prod_id
and a.yyyymmdd = b.yyyymmdd
and a.paper_no = b.paper_no
and a.io = b.io
and b.yyyymmdd = 指定日期
and a.yyyymmdd = 指定日期
and a.io = 进仓
and b.io = 进仓
and b.code = 有效的;
这样的速度要比前一种快了至少10倍以上。
人工调优,特别对于索引,条件顺序。
总之查询首先考虑查询自身的优化,将记录数尽可能减少,即where条件要尽可能充分(特别注意可推导和重复的区别),投影优先于联接,时刻以
减少联接数为分析的主要原则。然后是对索引的分析。至于量化分析,则是对多种策略的评价的直接方法。
主要摘自
http://topic.csdn.net/t/20050514/21/4007292.html
分享到:
相关推荐
SQL查询优化是数据库管理系统中至关重要的一个环节,其目的是提高数据检索速度,减轻服务器负载,提升系统的整体性能。本文将详细探讨SQL查询优化的常见原因、优化方法以及T-SQL编写时应注意的要点。 查询速度慢的...
### ORACLE中SQL查询优化技术 #### 一、引言 在现代企业级数据库应用中,Oracle数据库因其高性能、高可靠性和丰富的功能被广泛采用。然而,在实际的应用场景下,即使是设计良好的数据库系统也可能因为查询效率低下...
1. 合理使用常量优化查询: 在编写SQL语句时,应尽量避免将字段置于复杂的表达式中,因为这可能阻碍数据库优化器进行有效的优化。例如,`select * from teachers where salary/12=2000`不如`select * from teachers...
- **访问数据架构**:理解数据库的数据存储方式是优化查询的基础。例如,在Informix中,数据被组织成不同的表空间(tablespace),每个表空间包含一系列数据页。 - **谓词**:谓词是在WHERE子句中用于过滤结果集的...
- **优化查询计划**:通过设置数据库参数,影响查询执行计划的选择,以达到最佳性能。 ### SQL查询优化实例分析 以下是从给定的部分内容中抽取的一个SQL查询优化实例: ```sql -- 创建测试表testA CREATE TABLE ...
本文提供了对SQL查询优化的全面介绍,包括查询优化的重要性、执行计划的分析、常见的优化策略以及具体的优化示例。希望这篇文章能够帮助你更好地理解和运用SQL查询优化技巧,为你的数据库应用提升性能和效率。
本文深入探讨了SQL查询优化的重要性,并分析了影响查询性能的四大主要原因,以及SQL优化的一般步骤。 一、SQL查询性能低下的原因 1. 高成本操作:在大量记录集上进行排序或聚合等昂贵操作,可能导致CPU和内存资源...
时间都去哪儿了 - 深入学习SQL查询优化 在本节中,我们将深入探讨 SQL 查询优化的相关知识点。SQL 查询优化是数据库性能优化的关键步骤,旨在提高数据库的查询效率和性能。 查询执行过程 查询执行过程是 SQL 查询...
关系代数与SQL查询优化是数据库管理和性能提升中的重要研究领域。由于数据库查询性能对于系统整体运行效率有着决定性的影响,因此查询优化技术一直是数据库领域研究的热点。查询优化技术中,关系代数作为处理关系...
在实践中,你将按照详细步骤进行,例如设置SQL Server Profiler的跟踪,捕获特定事件,如死锁,以及分析和优化查询计划。 总结起来,SQL Server 2005 SQL查询优化涉及到以下几个核心知识点: 1. **SQL Server ...
例如,使用Oracle的SQL优化器,可以自动选择最有效的执行计划来运行SQL语句。此外,Oracle数据库还提供了分析和诊断工具,如自动工作负载存储库(AWR)报告和活动会话历史(ASH)报告,这些工具可以用来监测数据库...
对于复杂的多表JOIN查询,可以考虑使用物化视图、索引组织表(IOT)或者星型模式来优化查询性能。在大数据量处理时,分批处理和并行执行也是提高效率的有效策略。 最后,性能优化的测试和监控是必不可少的环节。...
### Oracle数据库SQL查询优化研究 #### 研究背景与意义 Oracle数据库作为目前应用最广泛的大型数据库之一,其查询性能对于系统的整体运行效率至关重要。随着数据量的增加,如何提升数据库的查询性能成为了亟待解决...
另外,对于联接的列,如果联接值为静态值,优化器通常不会使用索引,这也是优化查询时需要注意的一个点。 避免使用相关子查询也是提高SQL查询效率的重要方面。相关子查询会降低查询效率,因为它需要在处理外层查询...
【基于MapReduce的SQL查询优化分析】 SQL查询在传统的关系型数据库中被广泛使用,它是一种结构化查询语言,能够方便地执行数据的增、删、改、查操作。然而,在分布式数据库系统如HBase中,由于其底层依赖Hadoop的...
在实际工作中,优化查询语句可以大幅度提高程序的性能,有时甚至可以达到数十倍的提升效果。 总之,SQL查询优化技术在Informix数据库的应用中扮演着至关重要的角色。合理运用索引、精心设计where子句以及有效的临时...
优化查询能够确保数据处理的效率,确保在用户对数据库连接和响应速度敏感的应用中,比如B/S或C/S模式系统,提供快速的数据响应,进而影响用户对系统的评价。因此,掌握查询优化技术是学生学习数据库技术的难点,也是...