1

私はこのようなものに比較的慣れていないので、質問がダンプである場合は許してください。フィールドがid、str_fieldのテーブルがあるとします。str_fieldの値は、「12:17:1246:90」のようなものです。str_fieldに「17」などが含まれるすべての行を取得したいと思います。これを行うには、次のコマンドを実行する必要があります

SELECT id FROM `table_name` WHERE INSTR(str_field, '17')>0

テーブルに多数の行がある場合、クエリが遅くなる可能性があります。質問は次のとおりです。str_fieldにインデックスを付けると、クエリ実行の速度が上がりますか?

前もって感謝します!

PS。言い換えれば、私が求めているのは、インデックスは次のようなクエリの速度を上げるのかということです。

SELECT * FROM `table_name` WHERE str_field='value'

UPD str_fieldには、コロンで区切られた数字のみが含まれます。

4

3 に答える 3

5

テーブルに多数の行がある場合、クエリが遅くなる可能性があります。質問は次のとおりです。str_fieldにインデックスを付けると、クエリ実行の速度が上がりますか?

あまりない。テーブルに他の多くの列がある場合は、使用する列にカバーインデックスを作成できます(id, str_field)。インデックスが元のテーブルよりも小さくなり、読み取りが速くなるため、これはわずかに高速になります。ただし、(テーブル全体を完全にスキャンするのではなく)インデックスを完全にスキャンする必要があります。

ただし、それ以外の場合は、非正規化と呼ばれるアプローチを使用して、3つの列を持つ個別のテーブルを使用して個別の整数を格納することにより、クエリの速度を向上させることができます。

parent   sortorder   value
1        1           12
1        2           17
1        3           1246
1        4           90

このようなクエリ:

SELECT parent AS id
FROM table_values
WHERE `value` = 17

(value, parent)次に、このテーブルにインデックスを追加すると、クエリが高速化されます。sortorderこのクエリには列は必要ないことに注意してください。必要になると思わない場合は、この列をテーブルに含める必要はありません。

于 2012-06-02T12:45:42.997 に答える
3

フルテキストインデックスを作成し、特別なMATCH機能を使用できます:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

それでも、式の代わりに値を検索する方がはるかに高速です...

于 2012-06-02T12:35:56.317 に答える
2

インデックスはパフォーマンスを向上させることができます、それは本当です。

のような文字列データを含むフィールドがある場合は12:17:1246:90、クエリを使用できます

SELECT id FROM `table_name` WHERE `str_field` LIKE '%17%';

%1つ以上の文字を意味するジョーカー文字です。

于 2012-06-02T12:47:00.757 に答える