最初は、このトピックは非常に一般的なトピックであると言わざるを得ません。私はすべての関連トピックを研究しましたが、答えを見つけることができません。私は3つのテーブルを持っています。メッセージテーブルには300.000、タグテーブルには100万、message_tagテーブルには約1,000万行があります。message_tag.message_id列とmessage_tag.tag_id列にはインデックスがあります。私の目的は、特定のタグをリンクしたメッセージを選択することです。ただし、クエリ時間が長すぎます。20秒より短いクエリ時間はありません。一方、クエリ時間が長いために、クエリで結果が得られない場合もあります。テーブルの構造と私のクエリは以下のとおりです。この問題をどのように処理できますか?私はすべての提案を開いています。新しいスキーマでテーブルを再作成することもできます。データベースはMySql、ストレージモーターはMyIsamです。。
table name: messages
columns :
id (int)
message (vharchar)
message_poster (vharchar)
table name: tags
id (int)
tag (vharchar)
table name : message_tag
columns :
message_id (int)
tag_id (int)
私の質問:
SELECT messages.message_poster,
messages.message
FROM tags, messages, message_tag
WHERE message_tag.tag_id=191
AND messages.id= message_tag.message_id