我讀過more nuanced responses到多少列是太多的問題,想請教一個跟進。計算並減少行的大小來解決有效的MySQL列的限制
我繼承了一個相當混亂的項目(一個調查框架),但人們可以說,數據庫的設計實際上是正確的正常化,即一個人真的有因爲有問題的許多屬性。
我不會捍衛這一概念的爭論,但更迫切的一點是,我的時間很有限,我想幫助這個框架了,我能想到的最快的修復程序的用戶現在正在降低行大小。我懷疑我有能力在我有的時候改變數據庫模型。
列號現在是4661,但他們可以將它有望降低到至少3244,大概少(通過減少的問題,實際數量)。 硬性列限制是4096,但現在我甚至沒有成功添加2500列,可能是因爲行大小限制是65,535字節。
然而,當我計算我行的大小我最終值低得多,因爲幾乎所有的列是TINYINTs(調查答覆範圍從1-12)。 它甚至不適用於2000 TINYINTs(an example query that fails)。
使用formula given in the documentation我得到4996個字節或更少。
column.lengths = tinyints * 1
null.columns = length(all.columns)
variable.lengths.columns = 0
(row.length = 1+
(column.lengths)+
(null.columns + 7)/8+
(variable.lengths.columns)
)
## 4996
在行長計算中我誤解了些什麼?
你的專欄是'question_1','question_2' ...或類似的東西?在其他表格的「問題」中提取這些列,並將其與M:M關係與「人員」表格鏈接起來。在'MySQL'中,你可以把這個表與第三個表'person_question_link'('link_id','person_id','question_id')聯繫起來 – doktorgradus
@dokt謝謝你,但是我沒時間了,恐怕。我很樂意做到這一點,但我正在尋找一個快速解決方案。我也想知道爲什麼我超出了行大小/列數限制。 – Ruben
爲了避免這樣做,我幾乎傷害了任何人,但是一個「修復」將會是一個多值的專欄。 –