sql >> データベース >  >> RDS >> Mysql

MySQL関連記事クエリの改善

    まず、テーブル名をmessageに少し変更したことをお詫び申し上げます。 およびmessage_tag 読みやすさのために。

    第二に、私はこれをテストしませんでした。明確な答えではなく、ポインタとして使用してください。

    クエリは2つのサブクエリを使用しますが、これはそれほど効率的ではない可能性があり、おそらく改善の余地があります。まず、最も内側のクエリが現在のメッセージのタグを探します。次に、中央のクエリは、少なくとも1つの共通タグでマークされたメッセージを探します。グループ化は、一意のmessage_idを取得し、それらを共通タグの数で並べ替えるために使用されます。最後に、JOIN 追加の詳細をロードし、古いメッセージを除外するために使用されます。

    '$xyz'の代わりに疑問符を使用したことに気付くかもしれません 。これは、変数の内容をエスケープする必要がないようにするためです。

    SELECT message_id, title, date
    FROM message
    RIGHT JOIN (SELECT message_id, COUNT(*)
                FROM message_tag
                WHERE tag_id IN 
                    (SELECT MT.tag_id FROM message_tag MT WHERE MT.message_id = ?)
                GROUP BY message_id
                ORDER BY COUNT(*) DESC) RELATED_MESSAGES
                ON message.message_id = RELATED_MESSAGES.message_id
    WHERE date < ?
    


    1. mysqlスクリプトをpostgresqlスクリプトに変換する

    2. Accessでパラメータクエリを作成する方法

    3. MySQLトランザクションの難問

    4. キー/値テーブルであるwp_postmetaへの多くの内部結合を使用してクエリを改善する