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

広告
eyecatch

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

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

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 文を使用する場合やテーブル作成時にインデックスを作成する場合にも同じ書式でインデックスする文字の長さを指定することができます。

-- --

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

MySQLの使い方の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。