2010-03-30 35 views
0

我有一個238列的MySQL InnoDB表。其中56個是TEXT類型,27個是VARCHAR(255)。對於大量列,MyISAM類型表比InnoDB更好嗎?

當用戶有時插入數據時,我得到MySQL錯誤139。經過研究,我發現我可能會遇到InnoDB行大小/列大小/列數限制。 (我是這麼說的,因爲這三件事情的具體限制是相互依賴的。)

Docs on InnoDB給出了限制的想法。如果我把這個表切換到MyISAM,它可能解決這個問題嗎?

我瞭解65,535字節的最大行大小。我想我以某種方式達到了InnoDB額外的8000字節限制。

切換到PostgreSQL也是一個遠程選項,但會花費更長的時間。


關於列的數量:

由該表支持的類代表的問卷。有數百個問題。

每列表示一個屬性,清楚明確地屬於類CapitalGrantProposal而不是其他類。

我可以將列分佈在多個表中 - 我可以有表capital_grant_proposal_part_1s,capital_grant_proposal_part_2s等。但是,這會增加複雜性,因爲沒有好的目的。


更新:

試圖使該表MyISAM和它的作品。所以我用InnoDB得到了MySQL錯誤139,但與MyISAM沒有關係。

+0

出於好奇,爲什麼你有這麼多列? – Amber 2010-03-30 20:28:00

+1

你有沒有考慮過,如果你的餐桌結構是一個好設計,或者你應該重新設計它? 238列聽起來很瘋狂。 – 2010-03-30 20:28:36

+0

爲什麼?因爲它來自業務需求。什麼是瘋狂的呢?這是2010年。當代的RDBMS應該能夠輕鬆處理帶有100個cols的表格。我是否考慮過這是一個好的設計?是。 – Ethan 2010-03-30 20:44:00

回答

1

所以你可能要考慮什麼Mark Byers在上面的評論中陳述。在數據檢索和查詢優化方面,擁有良好的表結構非常重要。但話雖如此,但並不總是可以做這樣的改變。從我所瞭解的兩個引擎來看,這取決於你使用的數據庫。 InnoDB支持MyIsam不支持的事務和行鎖定。如果我沒有記錯的話,MyIsam也不支持外鍵關係,所以如果你在表結構中依賴它們,MyIsam就沒有了。另一方面,MyIsam支持InnoDB不支持的全文搜索,但您可以通過使用Lucene或其他庫構建自己的搜索功能來解決這個問題。希望這可以幫助....