Skip to Content
Product Information
Author's profile photo Sawa Ito

SAP SQL Anywhere におけるヒントを使用した SQL リクエストのカスタマイズ – パート 2 (過去のブログより)

 

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

https://blogs.sap.com/2014/04/02/customizing-sql-requests-with-hints-part-deux/

 

この記事のオリジナルは、Glenn Paulley が sybase.com に 2009 年 6月に掲載したものです。その中で、Glenn は SQL Anywhere におけるヒントを使用したクエリーセマンティクスのカスタマイズについて継続して解説しています。ブログの中で語られているように、状況によってはヒントは非常に便利です。

しかしながら、クエリーと DML の 効率的な実行において、ほとんどの場合は SQL Anywhere が稼働するすべてのコンテキストを考慮し、SQL Anywhere のクエリーオプティマイゼーションが「正しいこと」を行う、という素晴らしい仕事をしてくれるので、ヒントは経験豊富なユーザーが特定のシナリオでのみ使用するべきでしょう。

SQL リクエストのヒントに関するパート 1 の投稿で、私は特定の SQL 文によるコンカレンシーコントロールセマンティクスの修正テクニックについて解説しました。この 2 回目の投稿では、クエリーオプティマイゼーションにおいて、SQL Anywhere でサポートされている追加のヒントの機能について解説したいと思います。

明確にするために繰り返しますが、私はヒントの使用を推奨しているわけではありません。

ヒントを使用する場合には、かなりの注意を払う必要があります。なぜならば、インデックスヒントは、クエリーオプティマイザーの判断ロジックを上書きしてしまうからです。

また、メンテナンスの観点からも、問題となりやすいものです。特定の問題の回避策として、経験豊富なユーザーのみが使用することを推奨します。

 

ユーザー特有の選択性の見積もり

SQL Anywhere は、自己管理型のテーブルとカラム統計を(2009 年時点で)20 年前からサポートしています。

2000 年 12 月にリリースされたバージョン 8.0.0 からは、カラムの distribution と frequent-value statistics を見積もるためにセルフチューニングのカラムヒストグラムを導入しました。

さらに、SQL Anywhere のクエリーオプティマイザーでは、ヒストグラムだけではなく、術部の選択性を見積もるためにインデックスプローブなどの様々なツールも活用しています。

選択性の正確な見積もりは、クエリーオプティマイザーが join や他の中間結果のカーディナリティを見積もるのに役立ちます。そのため正確な見積もりは、より高い品質のアクセスプランにつながります。

しかしながら、9月に 解説したように、最適化することが難しい SQL クエリーというのもよくあります。例えば、以下のような追加の計算の形式や関数を含む術部を含む SQL クエリーです。

SELECT COUNT(*)
FROM SalesOrders so JOIN SalesOrderItems soi ON (so.id = soi.id)
WHERE DATEDIFF(day, so.OrderDate, soi.Shipdate) > 0

ここでの問題は、SQL Anywhere のクエリーオプティマイザーは、DATEDIFF が含まれる比較術部を分解して分析することができないということです。そのため、選択性で推測します。これは、そのステートメントのグラフィカルなプランで見ることができます。

 

/wp-content/uploads/2014/04/guess_estimate_407843.jpg

 

 

===

 

SAP SQL Anywhere に関する詳細情報は、SAP SQL Anywhere Communityページ<英語> を参照してください。

 

上記のコミュニティーに掲載されている技術情報は、順次SQL Anywhere 日本語コミュニティ

に掲載しています。

 

SQL Anywhere に関してはまずはこちらをご参照ください。無期限でご利用いただける無償の Developers Edition もこちらからダウンロードが可能です。

 

SQL Anywhere に関して技術的な質問のある方はコミュニティに登録し、
「Ask a Question」機能をご利用ください。

Language には「Japanese」、
Primary Tag には「SAP SQL Anywhere」を選択
User Tagに「sql anywhere」「sql anywhere Japanese question」

を入力してください。

不具合につきましては、サポート契約者様専用の問い合わせ方法にてお問い合わせください。

 

======================
ご購入に関するお問い合わせ

こちらよりお問い合わせください。

Assigned Tags

      Be the first to leave a comment
      You must be Logged on to comment or reply to a post.