ITPub博客

首页 > Linux操作系统 > Linux操作系统 > driving_site:Oracle 跨库关联数据时速度问题

driving_site:Oracle 跨库关联数据时速度问题

原创 Linux操作系统 作者:ForTechnology 时间:2011-08-17 16:31:33 0 删除 编辑
driving_site:Oracle 跨库关联数据时速度问题 收藏
       在近期的一个数据库查询统计中,需要通过db_link跨库进行表的关联,其中A库 中的某张拥有百万以上数据的表与B库 中的拥有千条记录以上的表进行关联。两张表进行关联的字段都建有索引。但在实际查询中如果从B库进行两表的关联却会导致A库中大表的全表扫描,查询速度慢是次要的,关键是全表扫描会影响到A库的正常运行。
       通过对SQL语句的不断调整、优化发现当两表进行简单的关联查询时,如果在select 后面采用"*"获取所有数据时,查询不会导致全表扫描,但在select 后面取具体字段时将会导致大表的全表扫描。
      在简单查询的基础上进行group分组将直接导致大表的全表扫描,在此种情况下,所有的语句优化技巧都将失效,因为索引无效,此时必须采取特殊的方法建立 起关联查询的索引,强制指定在关联过程中那一张表作为主要驱动表,那一张作为从表。在跨库关联查询的过程中,因为表不在同一个数据库中(同时在不同操作系 统的服务器上)将导致关联过程中将一张表的数据提取到另一个数据库中进行关联。此时问题出现,如果在关联过程中将大表数据提取到小表所在库进行运算将导致 大表的全表扫描,整个运算过程将非常慢且影响A库的正常运行。
      最终解决全表扫描的办法是,如果在B库对不同数据库的两张大小表进行关联时,通过driving_site强制指定主驱动表,即以所指定的表为主要表,将其它表作为从表提取到驱动表所在的库进行关联运算。具体语句如下:
    select /*+driving_site(main)*/  a.*,b.* from A.a main@BigTableDB,B.b minor where main.id=minor.id and .......
  这样一来就可以避免大表所在库的全表扫描,查询速度将成级数级提高。
解释:
当指定 /*+driving_site(main)*/ 时, oracle将会从minor表获取全部数据到main表所在的数据库来进行关联运算.(索引起作用,速度快)
若指定 /*+driving_site(minor)*/ 时, oracle将会从main表获取全部数据到minor表所在的数据库来进行关联运算.(索引失败,全表扫描)
当然Oracle中有很多的关键字用于指定关联查询时的运算方法,等后面碰到具体应用实例实再作一一介绍。
引用:
DRIVING_SITE 作用和 ORDERED 类似。 DRIVING_SITE 通常在分布式查询中使用。如果没有这个提示, Oracle 会先从远程点检索,并将它们连接到本地站点中。通过使用 DRIVING_SITE ,我们可以先在本地进行检索,将检索后的数据发送到远程节点进行连接。
提示:合理使用 DRIVING_SITE ,可以在分布式查询中大大减少网络流量。
Oracle Hint 收藏
 
Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响SQL的执行方式。
 
因为Hint的特殊作用,所以对于开发人员不应该在代码中使用它,Hint 更像是Oracle提供给DBA用来分析问题的工具 。在SQL代码中使用Hint,可能导致非常严重的后果,因为数据库的数据是变化的,在某一时刻使用这个执行计划是最优的,在另一个时刻,却可能很差,这也是CBO 取代RBO的原因之一,规则是死的,而数据是时刻变化的,为了获得最正确的执行计划,只有知道表中数据的实际情况,通过计算各种执行计划的成本,则其最优,才是最科学的,这也是CBO的工作机制。 在SQL代码中加入Hint,特别是性能相关的Hint是很危险的做法。
Hints
Hints are comments in a SQL statement that pass instructions to the Oracle Database optimizer. The optimizer uses these hints to choose an execution plan for the statement, unless some condition exists that prevents the optimizer from doing so.
Hints were introduced in Oracle7, when users had little recourse if the optimizer generated suboptimal plans. Now Oracle provides a number of tools, including the SQL Tuning Advisor, SQL plan management, and SQL Performance Analyzer, to help you address performance problems that are not solved by the optimizer. Oracle strongly recommends that you use those tools rather than hints. The tools are far superior to hints, because when used on an ongoing basis, they provide fresh solutions as your data and database environment change.
Hints should be used sparingly, and only after you have collected statistics on the relevant tables and evaluated the optimizer plan without hints using the EXPLAIN PLAN statement. Changing database conditions as well as query performance enhancements in subsequent releases can have significant impact on how hints in your code affect performance.
The remainder of this section provides information on some commonly used hints. If you decide to use hints rather than the more advanced tuning tools, be aware that any short-term benefit resulting from the use of hints may not continue to result in improved performance over the long term.
Oracle 联机文档对Hint的说明:
http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/sql_elements006.htm#SQLRF50705

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25897606/viewspace-705157/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Hints介绍 补充
请登录后发表评论 登录
全部评论

注册时间:2011-07-21

  • 博文量
    220
  • 访问量
    667498