私は最適化しようとしているMySQLのクエリを持っています。私は数十万行のテーブルtを持っていて、varcharカラムx(および他のもの)はインデックスが付けられていて、1000個未満の異なる値を持っています。私は特定の正規表現に一致するすべての別個のxを取得しようとしています。これは、これを策定する単純な方法である:正規表現クエリを最適化する
SELECT DISTINCT x
FROM t
WHERE x REGEXP 'someregexp'
しかし、REGEXPを使用した場合、MySQLは完全にインデックスを無視のように思えるので、それは数秒かかります。私はかなり低い数の固有値を持っているので、インデックスを使って別の値を取得し、その結果を正規表現を使ってフィルタリングするなら、これを処理するのはかなり速いはずですが、今のようには見えませんなぜなら、1秒未満で実行できるはずだからです。
MySQLクエリオプティマイザにそのようにすることができる方法はありますか?それだけで行わなければならない場合、高速で正規表現を(
SELECT d.x
FROM (SELECT DISTINCT x FROM t) d
WHERE d.x REGEXP 'someregexp'
それは最初の(インデックスに速いです)明確なフィルタリングを行う必要があり、この方法で、その後の操作を行います。
が「インデックスが作成され」 - 'SHOW CREATE TABLE'を提供してください。 –