MySQLなどのDBの検索速度が速い理由。

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/07/11 01:59:17
  • 終了:--

回答(4件)

id:ozonepapa No.1

ozonepapa回答回数288ベストアンサー獲得回数02004/07/11 02:17:05

ポイント17pt

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

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

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

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

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

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

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

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

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

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

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

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

id:kunitz

ありがとうございます!

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

2004/07/11 02:22:28
id:aki73ix No.2

aki73ix回答回数5224ベストアンサー獲得回数272004/07/11 02:23:19

ポイント17pt

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を検索」とありますが、あの大量テキストからの高速な検索はどういうシステムで実現されているのでしょうか?(もしくはどうい.. - 人力検索はてな

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

id:kunitz

ありがとうございます!

2004/07/11 02:25:37
id:ozonepapa No.3

ozonepapa回答回数288ベストアンサー獲得回数02004/07/11 08:49:15

ポイント18pt

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

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

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

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

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

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

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

id:kunitz

ありがとうございます!

2004/07/11 08:52:10
id:JULY No.4

JULY回答回数966ベストアンサー獲得回数2472004/07/11 23:08:23

ポイント18pt

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

id:kunitz

ありがとうございます!

2004/07/11 23:46:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません