TECHNOLOGY

Tips !(使用上のテクニック)

対象バージョン : Adaptive Server Anywhere 6.0.x、7.0.x
対象OS : Windows95/98/ME ,WindowsNT/2000

ST0110018

クエリのレスポンス改善方法

Tips !

オプティマイザが非効率的なクエリプランを選択した場合、クエリのレスポンスが低下してしまいます。

オプティマイザが非効率的なプランを選択してしまう要因としては、以下のような場合が考えられます。

– テスト環境で使用したデータベースを運用環境に移行した場合
– ユーザ数が大幅に変更された場合
– 大量のデータのロードや削除を行なった場合

(1)統計情報のデータ削除
このような場合には、DROP OPTIMIZER STATISTICSコマンドを使って格納されている統計情報のデータ削除をお勧め致します。統計情報の削除によって統計の再計算が行なわれますので、レスポンスの向上が図れる場合があります。

但し、一時的にレスポンスが低下するケースも考えられます。それは、統計情報が蓄積されていないためにデフォルトのプランを選択するためです。

しかし、これは一般的には通常使用を行っていくことで統計情報が蓄積され、徐々に向上していくことが予想されます。

(2)クエリ・オプティマイザの推測値
クエリ・オプティマイザは結果のロー数を、テーブルのサイズと WHERE句中の特定の制約によって推測しているため、推測値はほとんど常に不正確です。多くの場合、クエリ・オプティマイザの推測値は、オプティマイザが最適の方式として実際に選ぶローの数に十分近くなっていますが、例外もあります。

【推測値の使い方】
成功率がオプティマイザの推測値と異なることがわかっているときは、推測値を使ってデータベースにそれを通知することができます。推測値は  WHERE句中の制約の式の後にカンマと数値を入れ、() で囲んで作成します。数値はその式が選択すると思われるローのパーセンテージです。この例では成功率を 1% とします。

SELECT ship_date
FROM sales_order
WHERE ( ship_date > ‘2001/06/30′, 1 )
ORDER BY ship_date DESC

誤ったクエリプランが選択されている場合、推測値を指定することで、クエリのパフォーマンスを向上させることができます。

ただ、推測値を指定することが必ずしもパフォーマンスの向上につながるわけではありませんし、また、データの増加に伴い違うクエリプランのほうがパフォーマンスがいいような場合も出てくるかもしれません。
使用に当たってはその辺を十分に検討のうえ使用されることをお勧めいたします。