2456 部分文字列 はくぶん 2010-01-19 02:37:40
MySQLのリレーションに関する質問。
誰か知っている人がいたら教えて欲しい。

二つのテーブルをleft joinやinner joinで結ぶ際、
リレーションを結ぶ両方のカラムにインデクスを張れば、クエリは高速化する。
あくまで、両方が純粋にカラム同士だった場合。

もしリレーションの片方が、例えばsubstring_indexを使った部分文字列だった場合、
元のカラムにインデクスを張っても、そのインデクスは全く使われていない。

例えばこんな場合。
select column1, column2 from table1 left join table2 on substring_index(column3, ':', -1) = column4
column1とcolumn3はtable1、column2とcolumn4はtable2のカラムである。

この場合、column3にインデクスが張られていたとしても、
table1はフルスキャンされることになる。
レコード数が膨大だとクエリが恐ろしく重くなる。

こんな場合は、どんなインデクスを張ればいいのだろう。
または、どうすればtable1のフルスキャンを回避することができるのだろう。

文字列に対し先頭からの文字数を指定してインデクスを張ることはできるようだが、
こういった後方の部分文字列に対してインデスクを張ることはできないのだろうか。
メッセージ文字数:586/608