2013-02-27 130 views
0

我知道限制行的大小會將大小保持在設定的最大值,但是,如果我將所有行限制到它們將需要的最大值,是否會提高行的性能(即佔用較少的空間)限制行的大小是否有利於MySQL表大小?

或者mysql是否動態分配行所需的大小,並且最大行長度對它沒有影響?

+0

這將有利於你的表現;不是桌子的大小。關於我的頭腦,如果您將某些數據類型設置爲最大值,可能會以不同的方式對待它們。 – Kermit 2013-02-27 04:24:41

+0

優化性能的技巧之一是創建錶行時,它自己使用varchar而不是char,只要可能,而不是int等,使用tiny int將始終幫助優化查詢的性能。優化是雙刃劍,你需要在提前分析需求。 – 2013-02-27 04:30:18

回答

1

MySQL不會動態調整字段大小;可能需要的大小由您選擇的數據類型決定。但是,您可以選擇適當的數據類型來幫助優化數據庫。

例如,TINYINTSMALLINTMEDIUMINTINT,並BIGINT數據類型需要1個字節,分別爲2個字節,3個字節,4個字節,8個字節。如果你只能存儲高達10000的整數,那麼SMALLINT將是最好的選擇,因爲它可以存儲高達65,535(未簽名)的值,並有足夠的額外空間,並且需要INT的一半大小。

使用可變長度類型,如VARCHAR任何長度(包括255)都使用一個字節前綴來存儲長度。任何更多使用2字節的前綴。如果可能的話,將VARCHARs限制爲最多255。例如,字符串fooVARCHAR(3)字段和VARCHAR(255)字段中都需要4個字節。例如,如果字段的最大長度是500,foo將需要5個字節。

如果字符串總是具有相同的長度或非常接近的長度,那麼在可能的情況下使用短文本列(或有時甚至長文本列)時,CHAR類型可能是有益的。另外,如果您使用的是MyISAM存儲引擎,並且所有列都是固定長度的,則可以使用FIXED行格式,這是有益的。

有關MySQL數據類型的更多信息,請參閱manual

+0

由於G-金塊,這是一個偉大的回答,非常有幫助 – Austio 2013-03-01 13:14:11

0

我不知道你的問題的目的是什麼,但是如果你想最大限度地減少數據庫使用的存儲空間,你可以使用內置壓縮,當你使用InnoDB存儲引擎時它是有效的。

的更多信息:​​

我不知道它是如何影響性能(速度),我從來沒有使用過該功能,但我想壓縮可能顯著減慢你的數據庫。但是,如果某些託管服務器上的磁盤空間有限 - 對於沒有重負載的應用程序可能會有用。

+0

每個人都有上述很好的答案。然而這是多爲通用問題「做投資時間限制這些領域帶來的性能提升」看起來這是一個肯定的。 – Austio 2013-03-01 13:12:14

0

MySql不會自動分配必要的大小,因此您不想自己定義它以使數據庫的性能更好,並保持最小大小。

我以另一種方式走入其中的一個不錯的方法是使用NVARCHAR而不是VARCHAR,如果VARCHAR要用於長字符串,但尚未足夠長以適合需要大量空間的TEXT。