我有數據拆分到幾個mysql表中以防止數據重複,但是當我真的去服務數據時加入它們太慢了。因此,我構建了一個更小的緩存表,這個緩存表很可能在不久的將來需要使用(某些數據只與一個小時間幀有關,所以整個表約爲700,000行,但緩存約爲6000)。
構建此緩存在複製到實際緩存表之前使用臨時表,以便在每晚建立表時,實時緩存表不會停止。有時高速緩存表會在大約30分鐘內建成,但有時會卡住並永遠無法完成。在流程列表中,它只是說Copying to tmp table
,但如果我放過它,它會旋轉幾天。當複製到Tmp時Mysql太慢表
我該怎麼做才能防止陷入Copying to tmp table
?我看了看周圍和無處在線,我可以找到一個非常明確的答案是什麼導致這個除了一些信息here我試圖遵循,但無濟於事。
我認爲可能有更好的方式來建立表格而不是解決內存問題,因爲最終表格在行中很小(儘管每行很大)。構建查詢的一般形式,使緩存表是
Select col1,col2,col3... FROM tbl1 INNER JOIN tbl2 on ... INNER JOIN tbl3 on ...
LEFT JOIN (SELECT col4, col5, col6... FROM tbl4 INNER JOIN tbl5 on ...)
AS tbl6 on ... WHERE col2 > NOW() ORDER BY col3, col4
,因爲我想擁有的數據的副本內選擇,如果它存在加入需要的左側,但不希望被限制它如果沒有。
對不起,如果這不夠具體,但如果任何人有任何想法如何防止Copying to tmp table
我將不勝感激。
MySQL能夠以極高的速度完美地連接數百萬行的大型表格。你可以發佈你的模式並解釋你的查詢計劃嗎? –