文字列型のカラムでインデックスを作成する時に指定の長さの分だけを対象とする

文字列型の値が格納されたカラムを対象にインデックスを作成するとき、格納されている値のすべてを対象にするのではなく指定した文字数またはバイト数分だけを対象にインデックスを作成することができます。ここでは MySQL で文字列型のカラムでインデックスを作成する時に指定の長さの分だけを対象とする方法について解説します。

(Last modified: )

対象の値の一部だけを使ってインデックスを作成する

CREATE INDEX 文または ALTER TABLE 文でインデックスを作成するときに、値の中の指定した長さだけを対象にインデックスを作成する場合はカラム名の後に長さを指定してください。

CREATE INDEX index_name ON tbl_name (col_name(length), ...)

この書式が使用できるのはインデックスに対象となるカラムのデータ型が CHAR 、 VARCHAR 、 BINARY 、 VARBINARY 、 BLOB 、 TEXT のいずれかの場合です。先頭からの長さで指定しますが、 CHAR、 VARCHAR、 TEXT については文字数で指定し、 BINARY 、 VARBINARY、 BLOB についてはバイト数で指定します。

それでは実際にインデックスを作成してみます。先に対象となるテーブルを次のように作成しました。

create table user(id int, name varchar(10), address varchar(100));

対象の値の一部だけを使ってインデックスを作成する(1)

作成したテーブルの address カラムの 20文字分を対象にインデックスを作成します。次のように実行します。

create index addressindex on user(address(20));

対象の値の一部だけを使ってインデックスを作成する(2)

インデックスが作成されました。

それでは作成されたインデックスを確認してみます。

show index from user\G

対象の値の一部だけを使ってインデックスを作成する(3)

作成されたインデックスはインデックス設定された文字数を表す Sub_part が 20 と設定されていることが確認できます。

今回は CREATE INDEX 文を使用した場合で試してみましたが、ALTER TABLE 文を使用する場合やテーブル作成時にインデックスを作成する場合にも同じ書式でインデックスする文字の長さを指定することができます。

-- --

文字列型のカラムでインデックスを作成する時に指定の長さの分だけを対象とする方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。