質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Oracle Database 12c

Oracle Database 12cは、RDBMS製品です。世界初の商用RDBMSであるOracle Databaseのバージョンで、2013年にリリース。クラウド対応を考慮して設計されました。主な機能には、マルチテナント対応やインメモリデータベースの実装などがあります。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

4946閲覧

Office365 AccessからOracle12cへODBC接続した際のクエリ速度について

yoshit

総合スコア12

Oracle Database 12c

Oracle Database 12cは、RDBMS製品です。世界初の商用RDBMSであるOracle Databaseのバージョンで、2013年にリリース。クラウド対応を考慮して設計されました。主な機能には、マルチテナント対応やインメモリデータベースの実装などがあります。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2019/05/09 01:31

現在の状態

基幹系システムを既存のオンプレからAWSへ移行する計画が立ち上がり、社内で利用しているAccessを用いたサブシステムの検証を行っています。
検証環境としてクライアントはWindows10 x64 ビルド1809、サーバはWindows Server 2016 x64、DBはOracle12c、AccessはOffice365 Businessのバージョン1902を利用している状態です。Oracle ClientとAccessは32bitです。
検証環境下でAWS側に設置したDBサーバとのping値は100回の試行で以下のとおりでした。
最小 = 14ms、最大 = 29ms、平均 = 19ms

パススルークエリを作成し、それ単体を開く際には既存環境より速く立ち上がるのですがパススルークエリ同士をAccessの中で結合して選択クエリにした場合非常に速度が低下します。(オンプレ環境で30秒程度のものが10分経ってもまだ開かない)
Accessのファイルはローカル環境のHDDに置いた場合、AWS側のDBサーバに置いた場合の2パターン試しましたが結果に変わりはありませんでした。

余談ですが基幹系システム(webブラウザベース)はオンプレよりも検索結果の表示が速くなったのでDBサーバ側のスペックは必要十分だと思われます。

実現したいこと

もちろん選択クエリなぞ使わずパススルークエリで全てを書き直す、もしくはAccess自体をやめて作り直せばいいのはわかっているのですが何分前任の者から引き継いだばかりで数も多く、まだ半分以上がブラックボックスのような状態です。
とりあえず動くようにするのが最優先になってしまう為まず何が原因でこのような速度低下が起こっているのかのあたりだけでもつけたく、何卒お知恵を拝借したくよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

パススルーやリンクテーブルのような外部データを使用した結合や相関するような問い合わせの場合、パススルーやリンクテーブル単位でのレコードセットに対して1件毎に問い合わせが発生します。

例えば、A(=10件)、B(=10)件のパススルークエリーを結合した場合、Aの件数分、Bに対して問い合わせが発生します。
※明確な文献があるわけではなく、ほぼ経験則です。

冗長な記述になりますが、以下の様な記述をすれば、内部的なキャッシュにそれぞれのパススルークエリーの内容が展開されて、高速になるかもしれません。(但し大量データであればキャッシュサイズを拡張しない限り効果は望めないと思います)

SQL

1select * 2from (select * from パススルークエリ1) Q1 3 inner join (select * from パススルークエリ2) Q2 4 on Q1.KEY=Q2.KEY

ですが、単独のパススルークエリーに直すのと手間は変わらないかもしれません。

投稿2019/05/09 04:34

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshit

2019/05/13 00:10

ご回答ありがとうございます、お礼が遅くなりすみません。 やはり労を惜しまないことが一番の近道なのかなと思いました、具体的な例を示して頂きましたのでまずはこちらを参考にしつつ進めていきたいと思います。 あらためて御礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問