我有三张桌子。我的新闻有几个类别。
News
-------------------------
| id | title | created
Category
-------------------------
| id | title
News_Category
-------------------------
| news_id | category_id
但我在新闻中有很多行,有10,000,000行。使用joind获取数据将是性能问题。
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
我想对此问题有最好的查询。对于大表中的多对多关系数据,查询具有更好的性能。
请给我这个用例的最佳查询。
答案 0 :(得分:1)
该查询的最佳性能是永久存储它。这是您需要物化视图。
在MySQL上,您可以通过创建表来实现物化视图。
这是
create table FooMaterializedView as
(select foo1.*, foo2.* from foo1 join foo2 on ( ... ) where ... order by ...);
现在取决于源表更改的频率(这是接收插入,更新或删除)以及您需要使用最新版本的查询来实现合适的视图维护策略
这取决于您的需求和问题本身的执行情况:
如果你需要采取增量方法,我只能祝你好运。我可以指出,您可以使用触发器捕获源表上的更改,并且您需要使用算法或均衡方法计算更改制作物化视图。