0

現在、カスタム ワードプレス MySQL クエリを使用して、ショッピング サイトの関連商品を取得しています。ページのプロファイリングを行ったところ、このクエリに約 3 秒かかることに気付きましたが、最適化する方法がわかりません。クエリは次のとおりです。

explain select 
    p . *,
    unix_timestamp(p.post_modified) as post_modified_ut,
    unix_timestamp(p.post_date) as post_date_ut,
    (((2.3 * (MATCH (p.post_title) AGAINST ('Motorola+MBP+36+Digital+Video+Monitor' IN BOOLEAN MODE)))) + (0.6 * (MATCH (p.post_content) AGAINST ('Motorola+MBP+36+Digital+Video+Monitor' IN BOOLEAN MODE)))) AS relevance
from
    wp_posts as p,
    wp_terms as t,
    wp_term_taxonomy as tt,
    wp_term_relationships as tr
where
    (MATCH (p.post_title , p.post_content) AGAINST ('Motorola+MBP+36+Digital+Video+Monitor' IN BOOLEAN MODE))
        and tr.object_id = p.ID
        and tr.term_taxonomy_id = tt.term_taxonomy_id
        and tt.term_id = t.term_id
        and p.post_type = 'post'
        and p.post_status in ('inherit' , 'publish')        
group by p.ID , p.post_title
order by relevance desc
limit 5;

説明の結果は次のとおりです。

+----+-------------+-------+--------+-------------------------------------------------+------------------+---------+------------------------------------+------+---------------------------------+
| id | select_type | table | type   | possible_keys                                   | key              | key_len | ref                                | rows | Extra                           |
+----+-------------+-------+--------+-------------------------------------------------+------------------+---------+------------------------------------+------+---------------------------------+
|  1 | SIMPLE      | tt    | ALL    | PRIMARY,term_id_taxonomy                        | NULL             | NULL    | NULL                               | 2822 | Using temporary; Using filesort |
|  1 | SIMPLE      | t     | eq_ref | PRIMARY                                         | PRIMARY          | 8       | reviewexplorer.tt.term_id          |    1 | Using index                     |
|  1 | SIMPLE      | tr    | ref    | PRIMARY,term_taxonomy_id                        | term_taxonomy_id | 8       | reviewexplorer.tt.term_taxonomy_id |    5 |                                 |
|  1 | SIMPLE      | p     | eq_ref | PRIMARY,type_status_date,searches,searches_more | PRIMARY          | 8       | reviewexplorer.tr.object_id        |    1 | Using where                     |
+----+-------------+-------+--------+-------------------------------------------------+------------------+---------+------------------------------------+------+---------------------------------+

ご覧のとおり、私は一時テーブルを使用していますが、したくありません。このクエリを高速化するためにインデックスを作成したいのですが、説明が何を伝えているのか完全には理解できません。

4

1 に答える 1

0

どうやら、MySQL はテーブルのインデックスを使用できずwp_term_taxonomy、2822 行すべてを一時テーブルで調べて並べ替える必要がありました。そうは言っても、2822 行はそれほど大きくないため、このような長いクエリ時間を説明できます。DB またはディスクの負荷が高いですか? とりあえず...


クエリを詳しく見ると、非常に混乱します。どうやらあなたはwp_term_taxonomy.term_taxonomy_idandを持っていますwp_term_relationships.term_taxonomy_id 、可能性のあるインデックスは onwp_term_taxonomy.term_id_taxonomyです。

違いを見ます?term_taxonomy_idterm_id_taxonomy
これはタイプミスですか?エラー?「特徴」?

于 2013-08-01T09:49:40.460 に答える