1

次のように検索すると、MySQLがテーブル内の行をどのように見つけるのか疑問に思っています。

select * from table where field = 'text';

特定の検索アルゴリズムを使用していますか?テーブル内の情報を検索するのに実際に最速の方法ですか?または、別のアルゴリズム(Boyer-Mooreなど)を使用して検索マクロを作成すると、より高速に動作しますか?

4

3 に答える 3

3

フィールドにインデックスがある場合、データベースは多くの場合、インデックス付き検索に B ツリーを使用します。インデックスがない場合は、テーブル全体がスキャンされます。ここでは、MySql で使用されるいくつかの手法について説明します

http://dev.mysql.com/doc/refman/5.5/en/index-btree-hash.html

MySql の最適化には、何時間もの作業が費やされました。すでに完了した作業を利用し、やり直しを控える

于 2012-06-18T21:22:39.843 に答える
1

それらのレコードがどのように検出されたかに興味がある場合は、EXPLAINキーワードを使用して実行してみてください。

EXPLAIN select * from table where field = 'text';

バックグラウンドで何が起こっているのかをよりよく理解するために、 この記事を参照することをお勧めします。

もっと速く自分で何かを書くことができたら、私はとても驚きます。問題のテーブルにインデックスを作成して、選択を高速化することを検討できます。

于 2012-06-18T21:20:25.313 に答える
1

そのクエリでは、そのテーブルのすべてのエントリを検索し、そのフィールド列をその文字列と比較する以外に何もできません。

Boyer-Mooreは必要ありません。これは、要求されたのが完全に等しいためであり、フィールドにその文字列が含まれているかどうかを尋ねないためです。

于 2012-06-18T21:17:56.573 に答える