web-dev-qa-db-ja.com

Varcharのインデックスはパフォーマンスに違いをもたらしますか?

Varchar列のインデックスはクエリの実行を遅くしますか?それをintにすることができます。 LIKE%の比較を行う必要はありません。

37
Murvinlai

Varchar列のインデックスはクエリの実行を遅くしますか?

いいえ、違います。
オプティマイザーがインデックスの使用を決定した場合、クエリは高速に実行されます。そのテーブルのINSERTs/UPDATEs/DELETEsは遅くなりますが、気付くほどではありません。

LIKE%比較を行う必要はありません

以下を使用することに注意してください。

LIKE '%whatever%'

... willnotはインデックスを使用しますが、以下は:

LIKE 'whatever%'

キーは文字列の左側にワイルドカードを使用しているため、列のインデックスは使用できません。

また、 MySQLはインデックス用に確保するスペースの量を制限します -MyISAM(InnoDBの場合は767バイト)テーブルの場合、最大1000バイトの長さにすることができます。

82
OMG Ponies

Varchar列を整数で置き換えることができる場合(これがあなたのヒントだと思います)、整数列を含むインデックスは、いくつかの理由でvarchar列よりもパフォーマンスが良くなります。

  1. インデックスサイズが小さくなり、ページングが少なくなります。
  2. 整数の比較は、varcharよりもはるかに優れています。
11
Leigh S

インデックスを作成してもクエリの速度が遅くなることはありません。データベースサイズが大きくなるだけなので、試してみてください。

行をフェッチする際のパフォーマンスが向上するはずですが、データ、クエリに依存します。

7
YOU

インデックスを作成することでクエリを遅くすることはありません。列をint型にすることができる場合、ほとんどのRDBMSはvarcharsよりも速くintを検索できるため、そうすることをお勧めします

2
Brad

挿入に関してはパフォーマンスの問題があります。 varchar列にインデックスがある大きなテーブルへの挿入は非常に遅くなることは確かです。 (最大50倍)

0
Erhard Dinhobl