2009-10-09 49 views
1

我想優化我的MySQL表(MyISAM),我改變了一些列類型與phpmyadmin,主要是從int到smallint,中等int等。我做了後,MySQL真的陷入困境,服務器負載變得非常高。我在一個活網站上做了這個,我認爲這是問題所在,但即使將網站置於維護模式並等待負載下降,負載仍然在之後變得瘋狂。最後,我必須刪除這些表格,並用它們的原始列類型重新創建它們,以使事情順利進行......因此,在更改列類型之前和之後,我應該做些什麼?是否需要更新mysql列類型的過程?

將兩個不同的列類型連接表是否也會產生問題? I.E. id INT(11)加入MEDIUMINT(8)。我認爲我曾經這麼做過。

回答

1

你說:

「將加入兩個不同的列類型的表還可以創建一個問題I.E. ID INT(11)MEDIUMINT連接(8)我覺得在一個點上我這樣做?」。

是的。這可能會導致性能下降,因爲當您在不同類型的2列上進行連接時,RBDMS必須對其中一列中的每個值進行實時類型轉換,以匹配另一列中的類型,以便它可以執行比較。因此,您加入的列應始終爲相同類型,最好使用外鍵(如果您使用的是InnoDB表類型)。

+1

我還會添加:在你的mysql查詢之前使用EXPLAIN來查看列是如何加入的(可能會使用tmp表,這是過度殺傷) – dusoft 2009-10-09 17:27:55

+0

@dusoft好點。 EXPLAIN會告訴你正在使用什麼鍵,如果發生全表掃描等。 – Asaph 2009-10-09 17:29:03

+0

好的,我會確保這樣做。除此之外,我應該能夠正常更改所有列類型?你需要做什麼像刪除和重新創建索引? – Roger 2009-10-09 18:51:52

相關問題