專欄中,我有1 2個表:1間的關係(但它可能會成爲一個1:N的未來關係)如下:ORDER BY的連接表性能
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
有什麼我可以爲優化做兩個表合併爲單一旁邊的查詢一個(失去1:N關係的可能性)?
我在考慮在表article
中增加額外的列並使用觸發器來更新它。這樣我可以將索引添加到兩列,並且排序應該更快。
是否有任何其他方式如何優化查詢?
感謝
您現在在article_top上有哪些索引? – gbn
我在'article_id'和'article_top_id'上有索引...但是當'article_top'表爲空時,查詢很慢,所以我不確定是否將索引添加到'until'會有幫助。 –
這兩個列的順序可能應該被編入索引... article_top.until上缺少的索引可能是性能較差的原因,但首先查看查詢計劃。 –