• ベストアンサー

DBエンジンの仕組みについて

yujiの回答

  • yuji
  • ベストアンサー率37% (64/169)
回答No.2

DBエンジンでデータを取り出す場合には おそらく二分木探索(バイナリサーチ)が使用されているものだと思います。 例えば7つのデータがあった場合に 下記のような構造でデータを管理しているのでしょう。 (論理的に、ですが)    4  3   6 1 2 5 7 ここで5番目の値を取り出したい場合は 一番上の4と比較して、それより5が大きいので右下に進みます。 その後、6と比較してそれより5が小さいので左下に進みます。 その後、5と比較してそれと一致するのでそこのデータが 目的のデータとなるわけです。 7つの場合ですが、必ず3回以内の比較で目的のデータ へたどり着くことができます。 1,2,3,4,5,6,7 と並べて順に探索していく場合だと最悪7回比較する 必要があります。 これはデータ数が多ければ多いほど、その差が大きく なっていきます。

snake103
質問者

補足

ありがとうございます。参考になります。 補足で教えて下さい。 1、あるテーブルでどのフィールドにもIndex(索引)=バイナリサーチをつけない場合は、DBエンジンの探し方も、保存形式がバイナリかテキスト化の違いだけで、Perl+csvと同じ上から順に目的のレコードに到達するということですよね? 2、これは、パソコンの基本的動作の質問にはいると思うのですが、 例えば、一万件のレコードをもつファイルが一つあるとします。 そして欲しいレコードが五千件目とわかっているとします。 この場合メモリにバイナリデータでもテキストデータでも一万件のデータ=一つのファイルをすべて読み込んでから上から順に五千件目に到達するのでしょうか?私はプログラム、テキストベースの考え方しか出来ないので、そのファイルを扱う場合、いったんメモリにそのファイルのすべてを読み込むというイメージがわきます。 それとも、その部分だけメモリに読み込むことがバイナリデータの場合可能なのでしょうか? 私の勝手な今の偏見なのですが、可能じゃないとIndexの意味がないと思ってしまうのですが。

関連するQ&A

  • CSV形式にしてダウンロードするには?

    私はperlとMySQLを使ってインターネットサイトを作っている者です。 プレゼントの申込者をDBに格納しています。 それを何とかcsv形式でインターネットからダウンロードするような仕組みを考えているのですが、思い付きません。 どうかサンプルソースなどをご存知の方は教えて頂けないでしょうか? またその他にエクセルなど、他のファイルだったら簡単だよという情報もお待ちしております。 宜しくお願いします。

  • ハッシュ化するとDBに登録できない

    認証に使用するパスワードをmd5で暗号化してDBへ登録する処理をしています。 その際、暗号化後の文字列に”\r”という文字が入り、DBに登録できないという事象が発生しています。 そう多く発生している訳ではないようなのですが…。 そんなケースに当たった方、いらっしゃいますでしょうか? その場合、どうやってそれを回避されましたか? perlは5.8.5、PostgreSQLは7.4.13です。

    • ベストアンサー
    • Perl
  • DBからのCSVファイルダウンロード

    MySQLに溜めたデータをCSV形式でダウンロードしたいと思っていますが、ダウンロードしたファイルが文字化けして困っています。 PHP、DBともにEUCで作成しているのですが、プログラムの中に文字コードに関する記述が必要になるとは思うのですが、何を追加すればいいのか教えていただけますでしょうか?

    • ベストアンサー
    • PHP
  • ロボット検索にヒットされない仕組みについて

    はじめまして、こんにちは。 ロボット検索にヒットされない仕組みについて教えてください。 はじめにyahooのようなロボット検索でないものは申請がいるのでよね?とゆ~ことは申請さえしていなけれyahoonの検索にヒットすることはないって考えてよかったのでしょうか? それとgoogleのようなロボット検索の場合ですが、これは基本的に申請されているページからリンクをたどってgoogleのDBにサイトを登録していくのでしょうか? もしリンクをたどっていくのなら申請もしてなくて、どこからもリンクされていないページをアップしていた場合はどんなキーワードで検索してもヒットしないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • HTML
  • PHPorCGIでデータ検索

    こんにちは。 PHPで1万件弱のデータを3までのand条件で検索し検索結果を2つのフィールドを使ってソートするプログラムをひこうと思っています。 データの更新はCSVで行うのであくまでも検索のみです。 そこで問題なのは方法なのですが、 このような場合ですとやはりDBを使った方がいいのでしょうか?DBを使用するのだったらMySQLを考えていますが ホスティングサービスの関係でDBを使えないんです。 質問なのですが、 1.上記のような条件でデータをCSVで使って検索やソートができますか? 2.もしできるとしてDBと比べた時に開発のしやすさ、検索結果が表示されるまでのレスポンスはどれくらいの違いがありますか? 3.もしPHPが無理だとしたらCGIとCSVでは可能でしょうか?また可能でしたら2の比較はどうなりますか? 4.今回のような質問を比較しているサイト等ありますか?あったら教えていただけないでしょうか? 自分でも色々と探してみたのですが、どうにも見つからなくて困っています。 ご質問が色々とあって申し訳ございませんが、ご教授をよろしくお願いします。

    • ベストアンサー
    • PHP
  • DBの管理について

    たびたびお世話になります。 WEBで顧客情報を登録してもらいDBで管理する場合ACCESSなどのPCソフトで管理するのと、MYSQLなどと、PHP等でフォームを作成して管理するのではどちらがスムーズに管理できるのでしょうか?管理したい内容は 1・登録情報の追加、削除等 2・登録情報から条件を指定して抽出 3・抽出した所へメール送信 4・登録情報の一括登録(数千件) などを主に考えています。基本的に、データーはMYSQLのDBに登録されている内容を管理したいと思っています。宜しくお願いします

  • DBサーバーはどれがいいのですか?

    MySQL、PostgreSQL、SQLサーバー、ORACLEデータベースについて 仮に、ユーザが5000万人のSNSを作った場合、MySQLやPostgreSQLで対応できますか? 検索に時間がかかったりするのでしょうか? その場合、DBをORACLEにしたほうがいいのでしょうか? ■費用について もし、DBサーバーを1台設置して、ORACLEにした場合、初期費用や毎月のコストはどのくらいになるのでしょうか? ORACLE対応のDBサーバーの金額等も教えて頂ければ幸いです。 あと、SNSの会員が10万人までだとしたら、 MySQL、PostgreSQL、SQLサーバー、ORACLEのうちだと、どれがコスト的に一番効率的でしょうか?

  • DBの文字コード切り替え

    MySQL 5.6 なのですが・・・・ DBの文字コードはDB作成後にデータを登録した後に、途中で文字コードを変更した場合、DBに登録済みの全角文字はどうなりますか? 文字化けする場合、変換ツールのようなものはあるのでしょうか? また文字コードの変更は ini ファイルを変更してMySQLを再起動するだけでいいのでしょうか?

    • ベストアンサー
    • MySQL
  • 【質問】DBを介した検索 他2つ

    現在,大学での演習でコーディングを担当しています. HTMLで作った画面にJavaScriptを用いて機能を作っているのですが… その機能の中に,DBを介した検索機能があります. (DBはMysqlを用いて作成しました.) 他掲示板で質問したところJavaScriptとMysqlのDBは繋がらないとの 指摘を受けたのですが,ODBCというツールを使うことで繋げることが 出来き,とりあえず画面上にDBの内容を表示することは出来ました. (1)しかし,DBと繋ぐことが出来るこの段階でもScriptでDBを介した検索が出来るかが全く分かりません. それと,こちらは一緒に作業をしている友人の質問なのですが, (2)現在htmlを使用し登録画面から確認画面へデータを反映させるようなプログラミングをJavaScriptを用いて作成しています. 登録するデータをODBCを経由しSQL上(workspace)に一度仮保存し,そこから確認画面へとデータを反映させようと考えています. しかし,データは新規のものになるのでデータベースには存在していません.新規のデータはどのような表記の仕方をしていいのか困っています. またプログラミングの全体像があまり想像できていません. 何か参考になるサイトやサンプル文等がございましたらお聞かせください. 当方まだ初心者のため,まだ根本的な部分が理解できてないかもしれないのですが… 理解できる方がいましたらご指摘のほどをよろしくお願いします.

  • 掲示板用のDB設計

    PHPとMySQLを組み合わせた掲示板を作成しています。 ただ単にデータを挿入し、投稿日が新しい順に表示するだけではなく、各投稿に対して投稿、返信が出来る掲示板のDB設計に悩んでいます。 (一般的に言う ツリー型 です。) 各レコードにIDを割り振り、あるレコードに対し返信すると、そのレコードのIDが返信レコードに割り振られます。 ただ、この場合、返信に対する返信に元のレコードのIDを割り振ることは出来ず、困っています。 また、ツリー式の掲示板はどのようにしてデータをツリー形式で最新順にSELECTしているのでしょうか?

    • ベストアンサー
    • MySQL