manholeのおきらくごくらく日記
SPAM対策中です。コメントが反映されない方はリンク先をご覧ください。
[
Maven2
| Maven
| Axis2
| testing
]
オススメ:
xUnit Test Patterns
| JUnit Recipes
| パターン指向リファクタリング入門
| Ant第2版
2010-01-26 (火)
[長年日記]
■ [mysql] mysqlではexistsを使わない方が良いのか
- 漢(オトコ)のコンピュータ道: なぜMySQLのサブクエリは遅いのか。http://nippondanji.blogspot.com/2009/03/mysql_25.html
MySQLにおいてDEPENDENT SUBQUERYが何故遅いか?それはクエリの評価方法にある。
現時点でのMySQL(バージョン5.1)では、サブクエリはまず外部クエリの条件から評価される。そして、外部クエリの条件に合致する行が見つかると、その行がサブクエリの条件に合致するかどうかが評価されるわけである。
勉強になります。
existsは速い印象があるのですけれど、Oracle脳なのかしら。
[ツッコミを入れる]
2010-01-25 (月)
[長年日記]
■ [groovy] 再帰から戻ってくると(!?)変数の値が変わる
こんなディレクトリ階層に対して、
C:\temp\c>tree
C:.
└─cc1
└─ccc1
└─cccc1
ディレクトリをwalkするスクリプトを実行すると、
import java.io.File;
def private void walk(File dir) {
dir.eachFile() { child ->
a = child // File a = childなら問題なし
println "enter ${child} ... ${a}"
if (child.directory) {
walk(child)
}
println "leave ${child} ... ${a}"
}
}
walk(new File("C:/temp/c"))
childとaの値は同じになるように見えるけれど、途中から異なる値が出力されるようになる。
D:\src>groovy walk_recursion.groovy enter C:\temp\c\cc1 ... C:\temp\c\cc1 enter C:\temp\c\cc1\ccc1 ... C:\temp\c\cc1\ccc1 enter C:\temp\c\cc1\ccc1\cccc1 ... C:\temp\c\cc1\ccc1\cccc1 leave C:\temp\c\cc1\ccc1\cccc1 ... C:\temp\c\cc1\ccc1\cccc1 leave C:\temp\c\cc1\ccc1 ... C:\temp\c\cc1\ccc1\cccc1 // ★ leave C:\temp\c\cc1 ... C:\temp\c\cc1\ccc1\cccc1 // ★
a = child
部分を
File a = child
と変えると問題なし。
あ、、変数aがイチバン外側のエリアで宣言されてることになってるってことか。ややこしいな。
バージョンは1.7.0。
D:\src>groovy -v Groovy Version: 1.7.0 JVM: 1.6.0_16
[ツッコミを入れる]


_ shiba [最高ですよ、このキーボード。]