2016-09-09 4 views
1

私は非常に大きなテーブルを持っており、キーワードを持っているURLを検索する必要があります。LIKEでこれをやろうとしていますが、LIKEはこのように動作しています。文字列はfooで始まり、取得しようとするものは'%foo%'です。速い検索クエリ

$query = mysqli_query($link,"SELECT * FROM table WHERE url LIKE 'foo%' LIMIT number"); 

あなたが私にアイデアを与えることができれば完璧です。ありがとう!

また、私はurlとidのインデックスを持っています。

+2

'like '%...%''は決して高速ではありません。 DBはそのようなクエリのインデックスを使用することはできませんので、毎回完全なテーブルスキャンを実行する必要があります。クエリが間違っているのは何ですか? '%foo%'は、そのフィールドのどこでも 'foo'を見つけるために使用しなければならないものです。 'foo%'はfooがフィールドの値の最初の3文字であればそれを見つけます。 –

+0

私はこの質問をした理由を知っています。私はあなたのテーブルを検索してURL内のキーワードを見つけることができません。 –

+0

あなたはあなたのように 'like'を使うか、fulltext検索では、このケースでは大いに役立つだろうとは思っていません。 –

答えて

0

LIKEを使用するとクエリが遅くなります。

$query = mysqli_query($link,"SELECT * FROM table WHERE LOCATE('foo', url) > 0 LIMIT number"); 

LOCATEは、単に他の試合PHPでstrpos()に似リターン0のインデックス(マッチしない場合はstrpos除く()はfalseを返します)あります:1つのアイデアは、代わりにLOCATEをしようとするだろう。ワイルドカードマッチングはありません。

+0

私はそれを試みました、それは動作していますが、それはまだ遅いです、それはresulltsを得るために10秒のように私を取った、と私は2-3秒のような何かをしたい.. –

+1

LIKEを使用するクエリはどのくらいかかりましたか? –

+0

テーブルの大きさはどれくらいですか? –