我運行的站點有大量搜索得到執行。這些搜索並不重要,並且需要將多個數據片段加入到結果中。優化對information_schema的查詢
我的解決辦法是存儲在兩個表的搜索結果:搜索和SearchResult所
搜索包含搜索的元數據
SearchResult所包含兩列idsearch,IDDATA是一個內存表
在爲了防止搜索結果的內存溢出,我們定期修剪這個表並刷新陳舊的數據。據我所知,內存表具有表級別鎖定,因此在修剪過程中,searchresults表會被阻止並導致網站性能下降。
解決方案是爲每個搜索創建一個新表,然後在搜索失效時放棄此searchresults_xxxx表。
我這樣做是通過首先刪除搜索表中陳舊的條目。然後執行以下操作:
select table_name
from information_schema.tables
where
table_schema = 'mysite_datawarehouse'
and table_name not in (select concat('searchresults_', idsearch) from searches);
經常有幾千場比賽的襲擊,導致平均查詢時間約30秒左右。在此期間,表現再次下降,我又回到了原點。有沒有更好的方法來寫這個?或者更好的方法來設計這個?
謝謝!
你能定期定義嗎?如果你的意思是每天凌晨2點是否重要,需要30秒?如果你在白天做這件事,你只能在晚上做嗎?爲了改善你的查詢,你可以把它變成一個連接。如果你的桌子有任何大小的話,「不在」可能是令人討厭的。 – Ben
每10分鐘搜索一次無效。在清理之前,搜索通常有5k行。每個搜索通常具有存儲在搜索結果中的〜1k和〜20k之間的結果。所以清除舊的結果變得相當重要。 – bmancini