2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Oracle】同じSQLなのに早かったり遅ったりする

Posted at

同じSQLでも(厳密には違うのですが)
WHERE句の条件式に、リテラルで値を指定した場合 と バインド変数で値を指定した場合 とで
SQLの実行計画がかわる場合があります。

「同じSQLなのにプログラムから実行するとSQLの部分が遅いんです」という場合には、
おそらくSQL単体で(SQL実行ツールなどを介して)実行するときは、WHERE句の条件式にリテラルで値を与えたSQLを実行していて、プログラムで実行するときには、その部分をバインド変数に置き換えたSQLが実行されているということになっていると思います。(つまり、厳密には同じSQLで実行されていない。)

対処としては、統計情報を再取得することで実行計画が最適化されるようにするとか、SQLヒント句を利用して実行計画を固定するとかが必要となります。

2
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?