2011-11-13 28 views
0

は、私はかなり簡単な声明(3-4秒)のためにかなりのパフォーマンスの低下を取得しています:どのようなインデックスを使用しますか?

SELECT col1,col2,col3 FROM table WHERE fname LIKE '%D%' OR fname LIKE '%S%' ORDER BY DATE(bday) DESC LIMIT 0,100 

は私がfnameのにインデックスを持って、BDAYにも共同インデックスfnameの& BDAY上の別。ここに私の説明があります:

id select_type table type possible_keys key key_len ref rows Extra 

1 SIMPLE  table ALL NULL   NULL NULL  NULL 95856 Using where; Using filesort 
+2

インデックスは参考になりません。私は全文検索ソリューションを探します。 MySQLには何かが組み込まれています:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html –

+0

@Wiseguy:なぜあなたはあなたの答えを削除しましたか?それは有効なものです(おそらく、クエリが取得できる最も簡単なヘルプ)。 –

+0

'order by'は二次的ですが、ええ、まだ問題です。十分に小さいセットでは恐ろしいことではありませんが、実際には最初の場所に日付タイプとして保存する必要があります。 –

答えて

0

記載されているように、インデックスは役立ちません。個人的に私はこのためにフルテキスト検索の過剰使用を検討し、テーブルに他の列を追加し、それを挿入更新および索引に記入します。

1つのオフのようです。

4

インデックスはありません。

LIKE '%something%を使用している場合は、すべての行を調べて文字列を一致させる必要があります。

+0

私は使用できる代替手段がありますか?全文? –

+0

あなたは*できます*、はい...しかし、それはあなたが望む通りに動作しないかもしれません。実際にここで達成しようとしているのは、自分自身に質問する必要がある質問です。テーブルに追加の(インデックス可能な)列を追加して、検索しようとしているものを表すことができます。 –

関連する問題