簡體   English   中英

多對多關系表現

[英]many to many relation performance

我有三張桌子。 我的新聞有幾類。

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

我想對這個問題有最好的查詢。 對於大型表中的多對多關系數據,查詢具有更好的性能。

請給我關於此用例的最佳查詢。

該查詢的最佳性能是通過永久存儲來實現的。 這是您需要的實例化視圖。

在MySQL上,您可以通過創建表來實現物化視圖。

這是

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

現在取決於源表的更改頻率(這是接收插入,更新或刪除),以及使用最新版本的查詢需要多少資源才能實現合適的視圖維護策略

這取決於您的需求和問題本身的執行情況:

  1. 完整的計算(即截斷實例化視圖並從頭開始再次生成它)可能就足夠了
  2. 增量計算。 如果系統經常執行完整計算的成本太高,則必須捕獲源表上的更改,並根據更改更新實例化視圖。

如果您需要采取漸進的方法,我只能祝您好運。 我可以指出,您可以使用觸發器來捕獲源表上的更改 ,並且您將需要使用算法或均衡方法來計算要對物化視圖進行的更改

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM