カタツムリ2010年09月10日

「プログラム学習その11」

みなさん、おはようございます。

昨日はソーシャルチームの打ち上げで、
秋葉原に行ってきましたよ~

パフォーマンス改善の話がでましたので、
ここで少しまとめてみます。

まず、データーベースの構造を理解するためにも、
自分で、データーベースの仕組みを作ることが大切です。
そしてさらに、データーベースサーバーを自作してみましょう。

とはいっても、完全に機能を実装するのではなく、
ほんの一部のSQL文に対応するだけでも十分です。

そうすることによって、
どのようにソフトが出来ているのか分かれば、
ソフトに負荷がかからない方法も分かりますよ~

そして、もっと究極に突き詰めるなら、
CPUに合わせたアセンブラで書くべきですし、

その他の言語でも、
コンパイルを想定して書いてみましょう。

一度、コンパイルされたアセンブラを眺めるだけでも、
その効果は十分にあります。

そして書き方を少し変えるだけでも、
アセンブラのプログラムは短くなりますから、

スピードを必要とする処理ならば、
激的に全体のパフォーマンスも改善しますよ~

では、ここで少しだけ、SQL文を上げてみます。

SELECT * 住所一覧 where 都道府県 = '山口'

名簿テーブルに、1万件の登録者があるとします。
その中から、住所が、'山口' 県を抽出する場合の、
データーベースとプログラムを自分で作ってみましょう。

テーブルとデーターは、以下のような感じになりますね。

通し番号、県名、名前
--------------------
1,東京,Aさん
2,大阪,Bさん
3,愛知,Cさん
4,埼玉,Dさん
5,山口,Eさん
6,秋田,Fさん
7,青森,Gさん
8,沖縄,Hさん
9,新潟,Iさん
10,愛媛,Jさん



※これが、10000件あると過程


ここからプログラムで、山口を抽出する場合は、
先頭から、順番に調べていき、山口がきたら、
出力というフローになります。

// -------- ここから

最初の行を取り出す。

無限に繰り返し(;;)
{
if(もしデーターがなかったら){
処理を終了する。
}

if(県名が、山口なら) {
その行を出力する。
}

次の行を取り出す。
}

// ここまで。

先日紹介した、自分勝手の日本語のプログラムもどきで、
日本言語です。(笑)

さてさて、こんなプログラムだとするなら、
常に、10000回ループする処理になります。

だれが書いても、このようなフローでは、
処理速度が遅くなってしまいますね~

ここで、実は改善する方法があります。
裏技っぽく思うかもしれませんが、
実は、プログラムの基本中の基本です、

ソート→ユニーク→インデックス
この手法を、県名の列に対して行います。

新しくつくるデーターイメージは、書籍の目次です。

見出しとページ数の関係は、
目的の内容を探すのに便利ですが、

データーベースも同じように、
別データーとして作成するのです。

これを使って、プログラムで検索すると、
目的のデーター列に、一直線、
最短ルートでたどり着けます。

是非、みなさんも実際に挑戦してみて下さい。
プログラムとデーターベースの仕組みを、
一石二鳥で理解できますよ~

今日も「いいスマイル」で行きましょう!


ツイッターはじめました~フォロー待ってま~す!!
↓↓↓下記の3つのバナーをクリックして下さい。ランキングUPにご協力をお願いします。↓↓↓

にほんブログ村 経営ブログへランキングUP!

ランキングUP!

banner2.gif 人気blogランキング!

投稿者 shiozumi : 09:55