人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLなどのDBの検索速度が速い理由。
Select文などで結構高度な検索条件をかけても速い。
どういう仕組みになっているのでしょうか?

●質問者: kunitz
●カテゴリ:コンピュータ
✍キーワード:dB MySQL SELECT 検索
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● ozonepapa
●17ポイント

http://www.abc.com/

ABC.com

MySQLなどのリレーショナルDBは、読み込んだデータをメモリにキャッシュしています。

テーブルのサイズが、すべてメモリーに入ってしまうぐらいのデータの検索は確かに速く感じられますが、

データのサイズが大きくなるとパフォーマンスが得られず苦労することが多いです。

パフォーマンスを考慮する場合

・インデックスについて考慮する

+検索条件にあったインデックスを作成する

+検索はインデックスを使用できるようにする

+プライマリキーのインデックスは必須

・メモリーをできるだけ多く実装する

・正規形を崩し結合を減らす

+正規化されたテーブルは扱いやすいのでが、パフォーマンスがでないときにはあらかじめ結合した形にしておきます。

実際に、インデックスを見直すだけで検索速度が飛躍的に改善されることがあります。

◎質問者からの返答

ありがとうございます!

インデックスってなんでしょうか?


2 ● aki73ix
●17ポイント

http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9804/db_solu/

パフォーマンスの解はひとつではない

ここに検索の条件による速度比があります

つまり、検索に「インデックス」を使っていることときゃっしゅを内部に持っていることがポイントだと言うことが分かります

------------

インデックスとインデックスサービスはちょっと違いますが、データベースの索引と言う意味ではほぼ同じなので・・・

インデックスサービスは常にディスクを監視し、ファイルが新規に作成されると、ファイルから情報(文字やプロパティ等)を取り出し、カタログと呼ばれる単位でインデックス(データベース)を作成します。

また、ファイルが更新、削除された時も自動的にインデックスが更新されます。

これらの作業は全てバックグランドで自動的に実行される為、使用者は何も操作する必要は無く、画面にも何も表示されません。

http://www.geocities.jp/mickindex/database/db_optimize.html

SQLを速くするぞ―お手軽パフォーマンス・チューニング

SQL高速化のための手法が書かれているのですが、これも参考になるかと思います

http://www.hatena.ne.jp/1084431191

はてなのトップページに「過去の質問からXXXを検索」とありますが、あの大量テキストからの高速な検索はどういうシステムで実現されているのでしょうか?(もしくはどうい.. - 人力検索はてな

過去の質問ですが参考にどうぞ

◎質問者からの返答

ありがとうございます!


3 ● ozonepapa
●18ポイント

http://www.techscore.com/tech/sql/

SQL -TECHSCORE-

15.番目のところにインデックスの説明があります。

「インデックス」は、「本」の後ろについている「索引」です。索引がなければ、知りたい文字が書かれているところを「本」の最初から順に見てゆけなければなりません。

「索引」を使えば簡単に、そのページを開くことができます。

「リレーショナル・データベース」のインデックスも同じで、大きなデータをすべて読み込み調べると、時間がかかるので、

インデックス(索引)を使って調べます。

ひとつのテーブル(データ)にいろいろな種類の索引を作っておくことができ、有効に「インデックス」を使い検索することが、検索の速度につながってきます。

もちろん、データをメモリーに一度読んだデータを格納(キャッシュ)しておき次の検索で使用するというのも重要なポイントです。

◎質問者からの返答

ありがとうございます!


4 ● JULY
●18ポイント

http://dev.mysql.com/doc/mysql/ja/Table_types.html

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 7 MySQL のテーブル型

DB 一般論ではなく、MySQL に特化した話ですが、MySQL が早い、と言われたのは、

MySQL が ISAM という形式でデータを保存した時です。じつは、この形式では、

DB のもう一つの側面である保全性、たとえば複数のアクセスを扱うときの

排他制御、トランザクション処理といった物を実装せず、その代わり、高速に

検索出来る、というのがあります。

http://ml.postgresql.jp/pipermail/pgsql-jp/2004-June/016708.html

[pgsql-jp: 33146] PostgreSQL vs MySQL

これは、PostgreSQL の ML で、MySQL とのパフォーマンス比較をした例ですが、

InnoDB にすると、かつて言われていた MySQL の高速性は無いようです。

一般に DB のパフォーマンス比較は、いろんなケースが考えられるので、

簡単ではないのですが、MySQL が魔法のように早い、という訳では無いようです。

(ISAM の時の検索は早い、というのは事実のようです)。

ちょっと、質問の意味からはそれましたが、参考までに。

余談:MySQL も PostgreSQL もソースコードが公開されているので、時間と根気と

努力があれば、仕組みもわかる、かもしれません。って現実的じゃないけど(^^;。

◎質問者からの返答

ありがとうございます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ