本日は「プログラミング教室」のお時間です。

2023年05月25日/ コンピューター

ハイサイ。ご訪問、ありがとうございます。



久しぶりの更新になってしまいました。すみません。



今日の記事は、僕の本業でもあるプログラミングについてです。



小難しいお話になります。
専門用語も多いので、
興味が無ければどうぞスルーしてください。



仕事で主に使用しているのは、
マイクロソフト社のデータベースソフト「Access(アクセス)」です。



AccessはGUI環境で開発が行えるので、
初心者でもとっつきやすい開発言語だと思います。



一応、Accessは単独でもデータベースとして機能します。



扱うデータ量が大きくなってくると、
パフォーマンスの問題などが出てくるので、
他のデータベース(オラクルとかSQL-SERVERとか)
を使って、Accessはフロント側(入出力など)を担当する、
といった運用をしたりします。



他のデータベースに接続する際は、
リンクテーブルという便利なものが使えるので、
通常はリンクテーブルを使って処理します。



しかし、このリンクテーブルはデータ量が大きくなると
パフォーマンスが低下してしまうというデメリットがあります。



そこで役に立つのが「パススルークエリー」です。



パススルークエリーという名前は聞いたことがありましたが、
今日初めて使ってみました。



ネットでも使い方(作り方)を紹介しているサイトがあります。



「Access」「パススルークエリー」で検索すれば、
「ITエンジニアの備忘録的技術ブログ【仮】」
https://www.depthbomb.net/
というブログが見つかります。



そのブログには、パススルークエリーに関する情報がいくつか掲載されています。



ざっくり紹介すると、
まずリンクテーブルが遅くなる原因としては、
そのテーブルの全データを、サーバー側からコピーしてくる、というのがあります。
例え、抽出条件を与えて、僅かなレコードだけを取得したくても、
そのテーブルが何百万件という膨大なレコードを持っていたら、
それらを全てコピーしてからローカル側で必要なレコードの絞り込みを行うので、当然処理は遅くなります。



そのような場合、パススルークエリーを使えば
「サーバー側で必要なレコードの絞り込みを行い、その分だけをローカル側に返す」
という事ができるので、格段に処理速度が上がります。



このように、とてもありがたい技術なんですが、
困った事に「抽出条件を動的に変えられない」という問題もあります。
(↑クエリーを使ったことがある人なら分かると思いますが。)



そこで、クエリー自体を「その都度作る」という手法で対処できます。



先のブログでは
「【MS Access】動的にパススルークエリを作成する 」
https://www.depthbomb.net/?p=258
というページで紹介しています。



これが本当に役に立ちました。



ブログ内で紹介されている、
40行にも満たない関数があって、
コピーして使う事が可能です。



その関数では引数(パラメーター)が2つ用意されていましたが、
僕の方は「接続先データベース名」も引数に加えて
関数を改良しました。



場合によっては、ユーザー名やパスワードも引数にして、
汎用性を高めてもいいかも知れません。



あと、そのページでは説明が無かったのですが、
Accessでよく使う「日付の条件指定」で「#で囲む」というのが一般的ですが、
パススルークエリーの場合は「#」ではなく「'」シングルクォーテーションで囲む必要があります。



そのような点に注意してSQLを作成すれば、
パフォーマンスの良いプログラミングが出来るんじゃないかな?と思います。



長々とプログラミング教室にお付き合いくださり、ありがとうございました。





同じカテゴリー(コンピューター)の記事

Posted by 瀬長修 at 22:54│Comments(0)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。