mysql 多行比較大小 MySQL 行列大小問題

2021-10-25 14:45:23 字數 1064 閱讀 3814

1. 列數量限制

mysql強制限定每張表最多4096列(字段),實際應用上會比它少。

影響列數量的幾個因素:

1)行長度

2)儲存引擎,資料型別和字符集  (如:innodb每個表的限制為1017列)

3)表結構定義檔案.frm (限制不能超過64kb)

2. 行大小限制

1)每張表限制最大行大小為65535個位元組(bytes),即使儲存引擎支援更大的行,blob和text列也只能占用9~12個位元組,因為他們內容與行其餘部分分開儲存。

2)innodb錶行大小依據資料庫頁(innodb_page_size [4kb, 8kb, 16kb, and 32kb]),例如:16kb頁面大小,最大行大小略小於8kb。

3)對於可變長型別列受限於innodb最大行大小,它會選擇可變長度列進行外部頁外儲存,直到改行適應innodb行大小限制。

4)不同的儲存格式使用不同數量的頁面頭部資料和尾部資料,這會影響行可用的儲存量

3. 示例

3.1 varchar 列長度限制

1)可變長度列的儲存包括長度大小占用的位元組,該長度位元組計入行大小。用1到2個位元組表示長度(長度超過255時需要2個位元組)

2)編碼長度

字元型別若為gbk,每個字元最多佔2個位元組

字元型別若為utf8,每個字元最多佔3個位元組

字元型別若為latin1,每個字元最多佔1個位元組

3)儲存引擎

4)空列(每增加乙個空列,占用乙個位元組)

[1] varchar(n) charset=gbk

max(length_n)=(65535-2)/2=32766

[2] varchar(n) charset=utf8

max(length_n)=(65535-2)/3=21844

[3] id int, name varchar(20), metric varchar(n), charset=utf8

-- int -> 4 ;varchar(20) -> 1 + 20 * 3

max(length_n)=(65535-4-1-20*3-2)/3=21822

4. 參考

double比較大小

參考 comparing floating point numbers 總結幾點 0.float佔4byte,精度是6 7位 double佔8byte,精度是15 16位。1.因為double型別或float型別都是有精度的,其實都是取的近似值,所以有個誤差。和乙個很小的數比如0.00000001 ...

1235 比較大小

比較大小 time limit 1000ms memory limit 65536k total submit 145 accepted 51 description 輸入兩個十進位制整數a,b,請判斷它們的大小關係。我們重新定義兩個數的大小比較規則為 誰的二進位制表示中含1的個數多誰大,若含1的個...

shell 比較大小

一 整數比較 eq 等於,如 if a eq b ne 不等於,如 if a ne b gt 大於,如 if a gt b ge 大於等於,如 if a ge b lt 小於,如 if a lt b le 小於等於,如 if a le b 大於 需要雙括號 如 a b 大於等於 需要雙括號 如 a ...