Pet*_*ler 5 mysql sql database performance
我有1:1关系的2个表(但将来可能会变成1:N关系),如下所示:
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;
Run Code Online (Sandbox Code Playgroud)
我需要做的是选择文章依据;通过article_top.until DESC和之后article.inserted DESC(因此,“顶”的文章都在上面,其余的从最新分类到最旧)。
我执行以下查询,这很慢(当我跳过article_top.untilORDER BY子句中的时很快):
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
Run Code Online (Sandbox Code Playgroud)
除了将两个表合并为一个表(丢失1:N关系的可能性)之外,我还可以做一些优化查询的事情吗?
我正在考虑向表中添加其他列,article并使用触发器对其进行更新。这样,我可以将索引添加到两个列中,并且排序应该更快。
还有其他方法可以优化查询吗?
谢谢
将一列添加top_until到表中article,并从表中复制其值article_top(在插入时手动或使用触发器),并为不在article_top表中的文章提供零“top_until”值。top_until然后在和列上建立多列索引inserted:
INDEX( top_until, inserted )
Run Code Online (Sandbox Code Playgroud)
并像这样查询:
SELECT * FROM article
ORDER BY top_until DESC, inserted DESC
LIMIT 20
Run Code Online (Sandbox Code Playgroud)
这应该立即给出结果。
| 归档时间: |
|
| 查看次数: |
2315 次 |
| 最近记录: |