2012-02-17 38 views
1

我正在佈局我的表結構,並且試圖對如何設置存儲引擎做出有教育的猜測。這個設置的innodb和myisam的最佳組合?

該表的第一個字段是整數類型,帶有AUTO INCREMENT。字段2到5將約爲95%的讀取,5%的寫入(寫入僅爲INSERT。)然而,字段6將不斷更新,約50%讀取(SELECT語句)和50%寫入(10%。 )

我剛纔讀的您可以自由組合併發INSERT和SELECT語句的MyISAM表不鎖如果有從表中http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html沒有刪除的條目。我不打算從桌面上刪除任何行。

你會推薦我把表分成兩個不同的表。第一個表是MYISAM,其中字段1至5(從95%讀取,寫入5%)。第二個表是innodb,有兩個字段,第一個是AUTO INCREMENT,與第一個表中的第一個字段相同,第二個字段是不斷更新的字段(50%讀取50%寫入)?

插入到不同表中的兩條插入語句應該一個接一個地發生。但在極少數情況下,第一個INSERT語句通過,但第二個不行,我怎麼能強制每個表的第一個字段被正確地映射到彼此?

+1

爲了澄清,表1(MyISAM數據)和表2的一些其他職位(innodb)會共享一個「不斷更新」的專欄? – 2012-02-17 17:45:30

+0

嘿邁克,他們將分享的唯一列是自動遞增列。所以像表1和表2的第20行應該是彼此相關的。 – user784637 2012-02-17 18:09:47

+1

好的,那麼table1.ever_changing_col!= table2.ever_changing_col。我問的原因是,如果列不一樣,但它們共享一個linking_id,那麼tab12.ever_changing_col是對t​​able1的補充嗎? – 2012-02-17 18:12:11

回答

2

如果MyISAM表有多個VARCHAR字段you may want to convert the table's row format to FIXED。這可以將MyISAM表及其索引文件擴大80%到100%,但將提高查詢性能20%-30%而不會改變任何其他內容。

只要表格以相互排斥的方式使用(不加入),您應該可以。爲什麼InnoDB和MyISAM之間沒有JOIN? 每個JOIN查詢都不能混合使用InnoDB和MyISAM,否則每個SELECT查詢都會在MyISAM和InnoDB表上全表鎖定的情況下惡化。

這裏是我做了充分澄清InnoDB的VS的MyISAM

+1

+1。我已經閱讀了羅蘭多的幾個帖子,並且他在比賽中。 – 2012-02-17 20:52:43