関工健児誇りあれ!?

下関のブログです(^^)v 明日見村 MotoG5Plus Windows10 Kindle iPhone Access Excel VBA ALCATEL IDOL4 Zenfone2 ZE551ML CHUWI Hi8 目標は?100kb/s でも読めるアホblog です

SQL プログラミングの高速化(^^) 考え方編 ウンチクね

--- 2018-06-03 ---


意外とネ(^^); 予約投稿は難しいのダ

慣れてる人は簡単なのネ

それと同じな、スピードアップなお話しデス

 

例えば、ソート、関数、で遅くなる

Format してから抽出は、パフォーマンスが悪くなる

的な、ウンチク言ってる人もいます


確かにそうデス

しかし、高級言語しか触った事が無いからそう思うのョね

そのレベルでは無いのダョ


あの2進数の問題解きました?

アセンブラで、めっちゃ修正しましてチト怒られ気味でした私ですが、、、

それでも、ひと目、難解で放置した物件なのネ


あれな感じのレベルです

ステップ数(文書の行です) も最小なチョ〜高効率なロジックです


高級言語な方が気にするレベルではございません

それを気にするのなら?

それ以外を見直した方が簡単に高速化できます

(^^) キッパリ!

 

次は初歩的な事ね

読込み処理が1番速いと言いました

これには訳が有りまして、HDD な時代から、1件読んでるつもりでも、実際はブロック単位な塊で読まれています


1件読めば、10件読んでる!そう言う感じ

2件目以降はアドレス参照のみ

メモリ上に展開されていれば、11件目までは、HDD にアクセスしません

っと、言う事は?

速いと言う事です


ネットのオプションで良く見る先読みしますか?のアレね

古いPC だと、そう言う記述や、アロケーション(ファイルを新規作成する事です) で指定が出来たりします


データベースは、そう言う事も継承しつつデフォルトでそう言う仕組みになってると思われます

なので、高速ネ


っと言う事は?

データベースに書き込む時に、自分が読みたい、プライマリなキー順に、明示的に並べて上げれば必然的に高速化されます


こう言うのは、ハード屋さんの領域でも有るので、疑ったりする所では有りません

コンピュータの基本な所、OS 部分なお話し?な感じです

ここのお仕事をされているので有れば、もっとキチンと知らないとイケませんが、普通のプログラマ高級言語(VBA などの事です)を使っていて知るレベルのお話しでも有りません

時間があれば、書籍などを読むのは良いと思いますが、、、有るかは不明!


っと言う事は?

順次処理、シーケンシャルが1番速いのです

ソート(並べ替え) して読み込むのが効率的なら

最初からORDER BY で書き込む際に並べておけば良いのです

 

例えば、条件分岐

ある女性誌でアンケートを取りました

集計するのは、一括クエリでは難しそう(実は可能です)

1件づつ処理して複雑な条件をまとめた集計値が欲しいとします

例えば、アンアン


どうするのが適切か?

別に何も考えなければ来たまま1件づつですネ


ターゲット=20〜30代?

キャンキャン=10代中心?

アゲハ=ミドルな感じでしょうか?


前提条件は出ています

例えば?集計するのに、性別は必要です

どれから条件?


(答え)

性別=女性、その他、男性、の順

年齢別=20代、30代(ここまでは適宜)、10代、40代、、、

な想定が正しいと思われます


女性誌なので、女性が圧倒的に多いハズ

次が答えたくない

次が男性、ゼロじゃ無いです、必ず見る人は居ます


年齢別も同様です

仮に、条件を1つ1秒で計算して見て下さい


何も考えずに、

男性、女性、それ以外

10歳未満、10代、20代、30代、、、


計算しなくても少し順序を変えるだけで、どれだけ効率が上がるか分かるでしょ

(^^)?

 

先程できると言った一括処理です

一旦、中間ファイルへ分類と共に書き込めば、簡単にGroup By で集計できます


件数がそれなりならば、中間ファイル無しに、一時クエリを作ればできます

 

年齢別で、プログラムの内部テーブルを使用するとしましょう

Dim wAgeCnt(10) As Long


カウント wAgeCnt(x)

x=年齢/10 で格納できます、10=110歳以上ニャので考慮する必要は無いですが、ロジック的に、Else が、(10)になる様にすれば問題ないです


これでも良く見かけるのが、いちいち(1)、(2)、(3)、と計算させてるコーディングです

無駄ですネ

割って、参照、それで終わりです

 

ざっくりデスが、こう言う思考をする様で無ければ、SE とは言えません

ってか、コーディングレベルなので、それなりの所では敢えて書く必要は無いのです

以前、プログラマはコーダーです、って言いました

これ、もし書いていないと、普通の所だと、とんでも無く非効率な処理を書く人が多いです


業界な高速処理のお話しを読んで頂ければ分かると思います

ホント、駄目な人、多いので!

 

これからプログラミングを勉強したい!

っと思うので有れば、

作れば動く!な方から入るのでは無く、キチンとした基本から学ぶべきです


思考が固まってからでは、中々修正は効きません

出来ないクセに?頑固者?

って陰口、叩かれますョ

(^^);

 

面倒でも、処理をお絵かき、そして又、考える

が、、、

大事だと思います


慣れて来ると、お絵かきが、頭の中だけで出来る様になりますので!


急がば回れ

近道なんて無いのダョ


な、、、アドバイス的な、お話しでした

 


---

明日見むら

村長さんでした

(^^)/ SpeedUp?