Like検索対象のカラムでもインデックス使えるよ

ということは常識だと思ってたんですけど、そうでもない?いや、やっぱし常識ですか? 得意顔してネタを披露するとそんなの常識とか言われたり、些細な事だと思っていたらスゲーとか言われたり。この業界、未だに何が常識なのかよくわからんのですよ。

で、表題。varcharなどのカラムにインデックスを付けて、そのカラムに対してlike条件でselectした場合、前方一致に限りインデックスが利用されます。B-treeインデックスは最初の文字から順番に、その文字種に対応して格納先を割り振っていくので前方一致ならば範囲インデックスとして使えるのですよ。例えば郵便番号とか

where postal_code like '176%'

ISBN番号とか。

where isbn like '978-0-000-00000-_'

MySQLのtext型はだめっぽい。そもそもB-treeインデックス付けられないんじゃなかったかな?

電話番号の市外局番で検索したいとか、郵便番号を上3桁検索したいといった要件でも、検索用のカラムを作る必要はなくて、普通に格納して普通にインデックスを使えばよろしい。まさか電話番号や郵便番号を下4桁で検索とかしないでしょう?