質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

3回答

3808閲覧

MySQL : 日本語の完全一致を高速にSELECTするには?

Razumerians

総合スコア25

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

1グッド

2クリップ

投稿2017/01/19 07:40

MySQLにtext形式のカラムを作り、日本語文を入れています。

select * from tbl where item = 'ほげほげ'

の様に検索しているのですが、レコード数が増えると検索が重くなります。

itemカラムにindexを貼ろうと思いましたが、text型なのでindexを貼る事ができません。
完全一致で日本語文でもindexが貼れるカラム型があれば教えてください。

尚、文字量は100文字程です。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

text型なのでindexを貼る事ができません

ということはありません。

プリフィクス長を指定する必要があるだけです。
https://dev.mysql.com/doc/refman/5.6/ja/blob.html

BLOB と TEXT カラムのインデックスには、インデックスプリフィクス長を指定する必要があります。CHAR と VARCHAR では、プリフィクス長はオプションです。セクション8.3.4「カラムインデックス」を参照してください。

"プリフィクス長"とは、以下の CREATE TABLE文の(128)部分のことです。

sql

1CREATE TABLE tbl ( 2 item TEXT, 3 INDEX (item(128)) 4);

http://sqlfiddle.com/#!9/ffadd/2

ちなみに、プリフィックス長は(バイト数ではなく)文字数で指定します。
https://dev.mysql.com/doc/refman/5.6/ja/column-indexes.html

注記

プリフィクスの制限はバイト単位で測定されますが、CREATE TABLE ステートメントでのプリフィクス長は文字数で解釈されます。複数バイト文字セットを使用するカラムのプリフィクス長を指定する場合はこれを考慮してください。

投稿2017/01/19 08:10

編集2017/01/19 08:12
KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

itemのハッシュ値(できれば整数型)を格納するカラムを作り、それにインデックスを張ってはいかがですか。
格納するときにも問い合わせる際にもハッシュ値を生成するのはアプリ側です。

投稿2017/01/19 07:44

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

なんとも言えませんが、100文字程度の文字列で完全一致をねらっているなら
varcharにしておけばよいような気がしますが何か問題があるのでしょうか?

投稿2017/01/19 12:22

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問