私は1で2つのテーブルがあります:1の関係を(それはおそらく1になる可能性:N将来の関係)を次のように私が行う必要がある結合テーブルのパフォーマンスの欄BY ORDER
CREATE TABLE article (
article_id INT,
inserted DATETIME
) ENGINE InnoDB;
CREATE TABLE article_top (
article_top_id INT,
article_id INT,
until DATETIME
) ENGINE InnoDB;
何されます最初にarticle_top.until DESC
でソートされた記事を選択し、その後にarticle.inserted DESC
で並べ替えます(「トップ」記事は上部にあり、残りは最新のものから最も古いものにソートされます)。私は遅いクエリ、(高速私はORDER BY句でarticle_top.until
をスキップする場合)次の操作を行い
:
SELECT * FROM article
LEFT JOIN article_top
ON article.article_id = article_top.article_id
ORDER BY article_top.until DESC, article.inserted DESC
LIMIT 20
は、私は、単一の中に2つのテーブルをマージ横に最適化のためのクエリを何かできることはあります1(1:N関係の可能性を失う)?
私はテーブルarticle
に列を追加し、それを更新するためにトリガーを使用することを考えていました。このようにして、私は両方の列にインデックスを追加することができ、順序はより速くなるはずです。
クエリを最適化する方法は他にありますか?
おかげ
article_topにはどのようなインデックスがありますか? – gbn
私は 'article_id'と' article_top_id'にインデックスを持っていますが、 'article_top'テーブルが空のときはクエリが遅いので、' until'にインデックスを追加すると助けになるかどうかわかりません。 –
order byの両方の列は、おそらく索引付けされるべきです... article_top.untilの索引が欠落していると、パフォーマンスが低下する可能性がありますが、まず問合せ計画を見てください。 –