2

Using MySQL with a very large table (millions of entries), I need to find a row according to the 6 rightmost letters in one of its (indexed) fields.

I've tried using: SELECT * FROM 'users' WHERE field LIKE '%abcdef'

and SELECT * FROM 'users' WHERE RIGHT(field,6) = 'abcdef'

Both queries take about 8.5 seconds to complete. For comparison, should I use the = operator with the whole of the field, it'll take 0.15 seconds.

The only idea I have in mind right now is to create an additional indexed column in the table containing the 6 rightmost letters of the field, and use the = operator against it.

Any more elegant suggestions will be highly appreciated.

Thanks :)

4

1 に答える 1

4

私が今考えている唯一のアイデアは、フィールドの右端 6 文字を含む追加のインデックス付き列をテーブルに作成し、それに対して = 演算子を使用することです。

これはまさに MySQL で行う方法です。

残念ながら、MySQL は式またはインデックス付きビューのインデックスをまだサポートしていないため、提案した方法で行う必要があります。

関連している

于 2012-05-20T11:44:44.457 に答える