検索
ホームページデータベースmysql チュートリアル如何对Oracle中的优化器进行评估优化

如何对Oracle中的优化器进行评估优化

Jun 07, 2016 pm 04:18 PM
oracle最適化どうやって評価する行為

Oracle优化器在任何可能的时候都会对表达式进行评估,并且把特定的语法结构转换成等价的结构,这么做的原因是: 要么结果表达式能够比源表达式具有更快的速度。 要么源表达式只是结果表达式的一个等价语义结构。 不同的SQL结构有时具有同样的操作(例如:= A

Oracle优化器在任何可能的时候都会对表达式进行评估,并且把特定的语法结构转换成等价的结构,这么做的原因是:

·要么结果表达式能够比源表达式具有更快的速度。

·要么源表达式只是结果表达式的一个等价语义结构。

不同的SQL结构有时具有同样的操作(例如:= ANY (subquery) and IN (subquery)),Oracle会把他们映射到一个单一的语义结构。

下面将讨论优化器如何评估优化如下的情况和表达式:

常量 LIKE 操作符 IN 操作符 ANY和SOME 操作符 ALL 操作符 BETWEEN 操作符 NOT 操作符

传递(Transitivity) 确定性(DETERMINISTIC)函数

常量

常量的计算是在语句被优化时一次性完成,而不是在每次执行时。下面是检索月薪大于2000的的表达式: · sal > 24000/12

· sal > 2000

· sal*12 > 24000

如果SQL语句包括第一种情况,优化器会简单地把它转变成第二种。

注意:优化器不会简化跨越比较符的表达式,例如第三条语句,鉴于此,应用程序开发者应该尽量写用常量跟字段比较检索的表达式,而不要将字段置于表达式当中。

LIKE 操作符

优化器把使用LIKE操作符和一个没有通配符的表达式组成的检索表达式转换为一个“=”操作符表达式。

例如:优化器会把表达式ename LIKE 'SMITH'转换为ename = 'SMITH'优化器只能转换涉及到可变长数据类型的表达式,前一个例子中,,如果ENAME字段的类型是CHAR(10), 那么优化器将不做任何转换。

IN 操作符

优化器把使用IN比较符的检索表达式替换为等价的使用“=”和“OR”操作符的检索表达式。例如,优化器会把表达式ename IN ('SMITH','KING','JONES')替换为: ename = 'SMITH' OR ename = 'KING' OR ename = 'JONES'

ANY和SOME 操作符

优化器将跟随(following)值列表的ANY和SOME检索条件用等价的同等操作符和“OR”组成的表达式替换。

例如,优化器将如下所示的第一条语句用第二条语句替换: · sal > ANY (:first_sal, :second_sal)

· sal > :first_sal OR sal > :second_sal

优化器将跟随子查询的ANY和SOME检索条件转换成由“EXISTS”和一个相应的子查询组成的检索表达式。

例如,优化器将如下所示的第一条语句用第二条语句替换: · x > ANY (SELECT sal FROM emp WHERE job = 'ANALYST')

· EXISTS (SELECT sal FROM emp WHERE job = 'ANALYST' AND x > sal)

ALL 操作符

优化器将跟随值列表的ALL操作符用等价的“=”和“AND”组成的表达式替换。

例如,sal > ALL (:first_sal, :second_sal)表达式会被替换为: sal > :first_sal AND sal > :second_sal

对于跟随子查询的ALL表达式,优化器用ANY和另外一个合适的比较符组成的表达式替换。例如,优化器会把表达式 x > ALL (SELECT sal FROM emp WHERE deptno = 10) 替换为: NOT (x

接下来优化器会把第二个表达式适用ANY表达式的转换规则转换为下面的表达式: NOT EXISTS (SELECT sal FROM emp WHERE deptno = 10 AND x

BETWEEN 操作符

优化器总是用“>=”和“= 2000 AND sal

NOT 操作符

优化器总是试图简化检索条件以消除“NOT”逻辑操作符的影响,这将涉及到“NOT”操作符的消除以及代以相应的比较运算符。

例如,优化器将下面的第一条语句用第二条语句代替: · NOT deptno = (SELECT deptno FROM emp WHERE ename = 'TAYLOR')

· deptno (SELECT deptno FROM emp WHERE ename = 'TAYLOR')

通常情况下一个含有NOT操作符的语句有很多不同的写法,优化器的转换原则是使“NOT”操作符后边的子句尽可能的简单,即使可能会使结果表达式包含了更多的“NOT”操作符。例如,优化器将如下所示的第一条语句用第二条语句代替: · NOT (sal
· NOT sal = 1000 AND comm IS NOT NULL

传递(Transitivity)

如果“WHERE”子句的两个检索条件涉及了一个共同的字段,优化器有时会根据传递原理推断出第三个检索条件,随后可以根据这个推断出的条件对语句 进行优化,推断出的条件可能会激活一个原来的检索条件没有激活的潜在的接口路径(access path)。注意:传递仅仅被用在基于代价(cost-based)的优化中。

假设有一个这样的包含两个检索条件的“WHERE”子句:WHERE 字段1 常量 AND字段1 = 字段2,在这个例子里,优化器会推断出新的检索条件:字段2 常量。在这里,是比较运算符=、!=、^=、、>、=之中的任何一个,常量是指任何一个涉及了操作符、SQL函数、文字、绑定变量(bind variables)或者关联变量(correlation variables)的常量表达式。

例如,考虑这样一个包含两个各自使用了字段EMP.DEPTNO的检索条件的WHERE子句的查询: SELECT * FROM emp, dept WHERE emp.deptno = 20 AND emp.deptno = dept.deptno;

使用传递优化,优化器会推断出如下条件:dept.deptno = 20。如果有索引存在于EMP.DEPTNO字段上,这个条件会使调用这个索引的接口路径有效。注意:优化器只能对字段关联常量的表达式进行推断,而不是 字段关联字段的表达式。例如,包含这样条件的WHERE子句:字段1 字段3 AND 字段1 = 字段2,这种情况不能推断出表达式:字段2 字段3。

确定性(DETERMINISTIC)函数

在某些情况下,优化器能够使用先前的函数返回结果而不是重新执行用户定义的函数,这仅仅对那些以限制的方式来执行的函数来说是有效的。这些函数必须 对任何的输入都有同样的返回值,函数的结果必须不能因为包(PACKAGE)变量、数据库或会话(SESSION)的参数(例如NLS参数)不同而变化, 如果函数在将来重新定义,返回值必须对任何参数来说仍然与以前的返回值相同。函数的创建者可以在以CREATE FUNCTION、CREATE PACKAGE或者CREATE TYPE声明函数时根据以上的要求使用DETERMINISTIC关键字向数据库申明该函数为确定性函数,数据库不会对确定性函数的合法性进行校验,即使 一个函数明显的使用了包变量或操作了数据库,仍然可以被定义为确定性函数,这就是说如何安全合法的使用和定义确定性函数是程序员的责任。

当确定性函数在同一个查询里被多次调用,或者被基于函数的索引或物化视图(materialized view)调用时,有可能被一个已经计算出的值取代。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLのライセンスは、他のデータベースシステムと比較してどうですか?MySQLのライセンスは、他のデータベースシステムと比較してどうですか?Apr 25, 2025 am 12:26 AM

MySQLはGPLライセンスを使用します。 1)GPLライセンスにより、MySQLの無料使用、変更、分布が可能になりますが、変更された分布はGPLに準拠する必要があります。 2)商業ライセンスは、公的な変更を回避でき、機密性を必要とする商用アプリケーションに適しています。

MyisamよりもInnodbを選びますか?MyisamよりもInnodbを選びますか?Apr 25, 2025 am 12:22 AM

Myisamの代わりにInnoDBを選択する場合の状況には、次のものが含まれます。1)トランザクションサポート、2)高い並行性環境、3)高いデータの一貫性。逆に、Myisamを選択する際の状況には、1)主に操作を読む、2)トランザクションサポートは必要ありません。 INNODBは、eコマースプラットフォームなどの高いデータの一貫性とトランザクション処理を必要とするアプリケーションに適していますが、Myisamはブログシステムなどの読み取り集約型およびトランザクションのないアプリケーションに適しています。

MySQLの外国キーの目的を説明してください。MySQLの外国キーの目的を説明してください。Apr 25, 2025 am 12:17 AM

MySQLでは、外部キーの機能は、テーブル間の関係を確立し、データの一貫性と整合性を確保することです。外部キーは、参照整合性チェックとカスケード操作を通じてデータの有効性を維持します。パフォーマンスの最適化に注意し、それらを使用するときに一般的なエラーを避けてください。

MySQLのインデックスのさまざまなタイプは何ですか?MySQLのインデックスのさまざまなタイプは何ですか?Apr 25, 2025 am 12:12 AM

MySQLには、B-Treeインデックス、ハッシュインデックス、フルテキストインデックス、空間インデックスの4つのメインインデックスタイプがあります。 1.B-Treeインデックスは、範囲クエリ、ソート、グループ化に適しており、従業員テーブルの名前列の作成に適しています。 2。HASHインデックスは、同等のクエリに適しており、メモリストレージエンジンのHASH_TABLEテーブルのID列の作成に適しています。 3。フルテキストインデックスは、記事テーブルのコンテンツ列の作成に適したテキスト検索に使用されます。 4.空間インデックスは、地理空間クエリに使用され、場所テーブルのGEOM列での作成に適しています。

MySQLでインデックスをどのように作成しますか?MySQLでインデックスをどのように作成しますか?Apr 25, 2025 am 12:06 AM

tocreateanindexinmysql、usethecreateindexstatement.1)forasinglecolumn、 "createdexidx_lastnameonemployees(lastname);" 2)foracompositeindexを使用して、 "createindexidx_nameonemployees(lastname、firstname);" 3); "3)、" 3)を使用します

MySQLはSQLiteとどのように違いますか?MySQLはSQLiteとどのように違いますか?Apr 24, 2025 am 12:12 AM

MySQLとSQLiteの主な違いは、設計コンセプトと使用法のシナリオです。1。MySQLは、大規模なアプリケーションとエンタープライズレベルのソリューションに適しており、高性能と高い並行性をサポートしています。 2。SQLiteは、モバイルアプリケーションとデスクトップソフトウェアに適しており、軽量で埋め込みやすいです。

MySQLのインデックスとは何ですか?また、パフォーマンスをどのように改善しますか?MySQLのインデックスとは何ですか?また、パフォーマンスをどのように改善しますか?Apr 24, 2025 am 12:09 AM

MySQLのインデックスは、データの取得をスピードアップするために使用されるデータベーステーブル内の1つ以上の列の順序付けられた構造です。 1)インデックスは、スキャンされたデータの量を減らすことにより、クエリ速度を改善します。 2)B-Tree Indexは、バランスの取れたツリー構造を使用します。これは、範囲クエリとソートに適しています。 3)CreateIndexステートメントを使用して、createIndexidx_customer_idonorders(customer_id)などのインデックスを作成します。 4)Composite Indexesは、createIndexIDX_CUSTOMER_ORDERONORDERS(Customer_Id、Order_date)などのマルチコラムクエリを最適化できます。 5)説明を使用してクエリ計画を分析し、回避します

データの一貫性を確保するために、MySQLでトランザクションを使用する方法を説明します。データの一貫性を確保するために、MySQLでトランザクションを使用する方法を説明します。Apr 24, 2025 am 12:09 AM

MySQLでトランザクションを使用すると、データの一貫性が保証されます。 1)StartTransactionを介してトランザクションを開始し、SQL操作を実行して、コミットまたはロールバックで送信します。 2)SavePointを使用してSave Pointを設定して、部分的なロールバックを許可します。 3)パフォーマンスの最適化の提案には、トランザクション時間の短縮、大規模なクエリの回避、分離レベルの使用が合理的に含まれます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター