gpt4 book ai didi

mysql - 多对多关系性能

转载 作者:行者123 更新时间:2023-11-29 00:29:17 27 4
gpt4 key购买 nike

我有三个表。我的新闻有一个或几个类别。

News
-------------------------
| id | title | created


Category
-------------------------
| id | title


News_Category
-------------------------
| news_id | category_id

但是我在新闻上有很多行,大约有 10,000,000 行。使用 join 获取数据将是性能问题。

Select title from News_Category left join News on (News_Category.news_id = News.id)
group by News_Category.id order by News.created desc limit 10

我想对此问题进行最佳查询。对于大表中的多对多关系数据,查询性能更好。

请给我这个用​​例的最佳查询。

最佳答案

该查询的最佳性能是永久存储它。这是你需要的物化 View 。

在MySQL上可以通过创建表来实现物化 View 。

这是

create table FooMaterializedView as
(select foo1.*, foo2.* from foo1 join foo2 on ( ... ) where ... order by ...);

现在根据源表更改的频率(这是接收插入、更新或删除)以及您需要多少使用最新版本的查询,您需要实现合适的 View 维护策略.

这是根据您的需要和问题本身执行的:

  1. 完全计算(即截断物化 View 并从头开始重新生成它)可能就足够了
  2. 增量计算。如果系统经常执行完整计算的成本太高,则您必须捕获源表上的更改并根据更改更新实体化 View 。

如果您需要采用增量方法,我只能祝您好运。我可以指出,您可以使用触发器捕获源表上的更改,并且您需要使用算法或均衡方法来计算更改以使物化 View 。

关于mysql - 多对多关系性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17366722/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com