2009年11月21日土曜日

groovyとoracleでインデックスが使用されたかどうかを調べる

groovyとoracleでインデックスが使用されたかどうかを調べるには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@localhost:1521:orcl",
"scott",
"tiger",
"oracle.jdbc.driver.OracleDriver")

// インデックスの監視
sql.execute("alter index pk_emp monitoring usage")

// インデックスを使用しないクエリ
query = """
select ename from emp where to_char(empno) = '7369'
"""
sql.eachRow(query){
// 社員名
println("ename:${it.ename}")
println "----"
}

query = """
select * from v\$object_usage
"""
sql.eachRow(query){
// インデックス名
println("index_name:${it.index_name}")
// 使用されたかどうか
println("used:${it.used}")
println "----"
}

// インデックスを使用するクエリ
query = """
select ename from emp where empno = 7369
"""
sql.eachRow(query){
// 社員名
println("ename:${it.ename}")
println "----"
}

query = """
select * from v\$object_usage
"""
sql.eachRow(query){
// インデックス名
println("index_name:${it.index_name}")
// 使用されたかどうか
println("used:${it.used}")
println "----"
}

// インデックスの監視停止
sql.execute("alter index pk_emp nomonitoring usage")


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
V$OBJECT_USAGE
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2077.htm#sthref3094

0 件のコメント:

コメントを投稿