2016-05-25 12 views
-1

は、問題が頻繁に遅いクエリが発生する問題を解決するのに役立ちます。SQLの低速なクエリSQL_CALC_FOUND_ROWS

# Query_time: 12.519347 Lock_time: 0.000057 Rows_sent: 0 Rows_examined: 98260 
SET timestamp=1464192549; 
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID 
FROM wp_posts 
WHERE 1=1 
    AND (((wp_posts.post_title LIKE '%Медвен%') OR (wp_posts.post_excerpt LIKE '%Медвен%') OR (wp_posts.post_content LIKE '%Медвен%'))) AND wp_posts.post_type IN ('post', 'page', 'attachment') AND ((wp_posts.post_status = 'publish')) 
ORDER BY wp_posts.post_title LIKE '%Медвен%' DESC, wp_posts.post_date DESC LIMIT 0, 20; 

どのように修正するのですか?

+0

は、テーブルスキーマを提供します。あなたは '(wp_posts.post_title、wp_posts.post_date)'に対してインデックスを持っていますか? 'LIKE'%Медвен% ''を' LIKE 'に変更しようとすることができます – Alex

+0

SHOW CREATE TABLE wp_postsの結果とwp_postsのSHOW INDEXの結果をあなたの質問と一緒に考えることを検討してください。 –

答えて

1

プレフィックスの一致ではない(つまり、文字列の先頭の開始と一致しない)LIKE句では、通常のBTREEインデックスを活用することはできません。 LIKE sometext%はBTREEインデックスを使用し、LIKE %sometext%はこのインデックスを使用できません。

ORDER BYにも同様のLIKE句があります。この句は、並べ替えの問題をさらに複雑にします。

このように、現在のフォームで最終的にクエリを最適化しようとすると、ORDER BY条件を取り除くことができないという希望はないと思います。

これは、1つの用語で複数の列にまたがって検索しているように見えますが、全文検索でよりうまく実行できます。 http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html

フルテキスト検索では、この種の検索パターンに最適化された特定のタイプのインデックス(FULLTEXTインデックス)を利用しています。

関連する問題