利用query_rewrite調優SQL效能甚至改變結果
1,問題:
一般為了解決效能問題,可能需要使用outline、sql profile固定執行計劃。
dbms_advanced_rewrite重寫SQL,甚至可能透過重寫改變查詢結果。
2,條件:
--許可權:
execute on dbms_advanced_rewrite
create materialized view
--回話或系統級設定
query_rewrite_integerity=trusted/stale_tolerated(enfored為預設值)
3,測試:
3.1版本
SQL> select * from v$version;
BANNER
----------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
3.2準備使用者
SQL> create user tom identified by tom;
User created.
SQL> grant connect,resource to tom;
Grant succeeded.
SQL> grant execute on dbms_advanced_rewrite to tom;
Grant succeeded.
3.3 準備測試表:
SQL> create table t1(x int);
Table created.
SQL> create table t2(x int);
Table created.
SQL> insert into t1 values(1);
1 row created.
SQL> r
1* insert into t1 values(1)
1 row created.
SQL> commit;
Commit complete.
3.4 宣告等價性
begin
SYS.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE (
name => 'TOM.SQL1',
source_stmt => 'select * from t1',
destination_stmt => 'select * from t2',
validate =>false);
end;
/
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_ADVANCED_REWRITE", line 29
ORA-06512: at "SYS.DBMS_ADVANCED_REWRITE", line 185
ORA-06512: at line 2
SQL> conn / as sysdba
SQL> grant create materialized view to tom;
Grant succeeded.
SQL> conn tom/tom
SQL> begin
SYS.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE (
name => 'TOM.SQL1',
source_stmt => 'select * from t1',
destination_stmt => 'select * from t2',
validate =>false);
end;
/
2 3 4 5 6 7 8
PL/SQL procedure successfully completed.
3.5 看效果
SQL> select * from t1;
X
----------
1
1
--需要設定查詢重寫完整性
SQL> alter session set query_rewrite_integrity=trusted;
Session altered.
SQL> select * from t1;
no rows selected
--變為大寫,不妨礙重寫
SQL> select * from T1;
no rows selected
--增加空格,不妨礙重寫
SQL> select * from T1;
no rows selected
--增加別名,影響重寫
SQL> select * from t1 a;
X
----------
1
1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-1318535/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- UIColletionView效能調研結果UIView
- 【SQL 調優】繫結變數窺測SQL變數
- 【sql調優】繫結變數與CBOSQL變數
- 【sql調優】使用繫結變數(二)SQL變數
- 【sql調優】使用繫結變數(一)SQL變數
- SQL效能調優綜述SQL
- 效能調優——SQL最佳化SQL
- SQL Server效能調優札記 [zt]SQLServer
- 【效能優化】查詢繫結變數的sql語句優化變數SQL
- MySQL效能優化之簡單sql改寫MySql優化
- SQLServer效能優化之改寫SQL語句SQLServer優化
- 部落格連結—Oracle效能調優Oracle
- 利用coe_xfr_sql_profile 改變執行計劃SQL
- oracle筆記整理13——效能調優之SQL優化Oracle筆記SQL優化
- MySQL 索引和 SQL 調優總結MySql索引
- 改進資料庫效能-SQL查詢優化資料庫SQL優化
- SQL Server調優實戰 亂建聚集索引的後果SQLServer索引
- 效能調優概述,這是一篇最通俗易懂的效能調優總結
- MySQL的SQL效能優化總結MySql優化
- SQL查詢結果集對注入的影響及利用SQL
- SQL調優SQL
- Spark 效能調優--資源調優Spark
- Spark 效能調優--Shuffle調優 SortShuffleManagerSpark
- h5效能優化,細節決定結果。H5優化
- 【效能調優】效能測試、分析與調優基礎
- Oracle 高效能SQL引擎剖析--SQL優化與調優機制詳解OracleSQL優化
- ElasticSearch效能調優Elasticsearch
- Nginx 效能調優Nginx
- iOS效能調優iOS
- php效能調優PHP
- Java效能調優Java
- Spark效能調優Spark
- oracle效能調優Oracle
- 一次效能測試調優總結
- SQL優化思路&結果集重用優化、分割槽索引優化測試SQL優化索引
- SQL改寫優化SQL優化
- 利用LoadRunner進行效能測試和結果分析(連載一)
- 利用LoadRunner進行效能測試和結果分析(連載二