題目1:講講你對MySQL myisam和innodb的認識。然後你認為他們的區別在那裡?為什麼?
答:這兩個是MySQL主要存儲引擎。
簡要介紹來自官網。
簡要介紹:myIsam
myIdam是默認存儲引擎。它基於更老的ISAM代碼,但有很多有用的擴展。(注意MySQL5.1不支持ISAM)。
每個myisam在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。.frm文件存儲表定義。數據文件的擴展名為.MYD(MYData)。索引文件的擴展名是.MYI(MYIndex)。
簡要介紹:InnoDB
InnoDB給MySQL提供了具有提交、回滾和崩潰恢復能力的事務安全(ACID兼容)存儲引擎。InnoDB鎖定在行級並且也在SELECT語句提供一個Oracle風格一致的非鎖定讀。這些特色增加了多用戶部署和性能。沒有在InnoDB中擴大鎖定的需要,因為在InnoDB中行級鎖定適合非常小的空間。InnoDB也支持FOREIGN KEY強制。在SQL查詢中,你可以自由地將InnoDB類型的表與其它MySQL的表的類型混合起來,甚至在同一個查詢中也可以混合。
InnoDB是為處理巨大數據量時的最大性能設計。它的CPU效率可能是任何其它基於磁盤的關系數據庫引擎所不能匹敵的。
InnoDB存儲引擎被完全與MySQL服務器整合,InnoDB存儲引擎為在主內存中緩存數據和索引而維持它自己的緩沖池。InnoDB存儲它的表&索引在一個表空間中,表空間可以包含數個文件(或原始磁盤分區)。這與MyISAM表不同,比如在myisam表中每個表被存在分離的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統上。
InnoDB默認地被包含在MySQL二進制分發中。Windows Essentials installer使InnoDB成為Windows上MySQL的默認表。
InnoDB被用來在眾多需要高性能的大型數據庫站點上產生。著名的Internet新聞站點Slashdot.org運行在InnoDB上。Mytrix Inc.在InnoDB上存儲超過1TB的數據,還有一些其它站點在InnoDB上處理平均每秒800次插入/更新的負荷。
簡單概括幾點如下:
1. 通過以上不難看出,myIsam InnoDB的用途,myisam主要適用於中小型數據量。InnoDB引擎適用於大數據量。上面已經講得很清楚拉。著名的開源電子商務系統[magento]就是采用InnoDB創建。
2. myIsam寫入速度比InnoDB快。
3. 在使用InnoDB時候需要對my.cnf進行配置以保證MySQL達到最大效率。詳細可以查看官網[inndo性能調節]:
http://dev.MySQL.com/doc/refman/5.1/zh/storage-engines.Html#innodb-tuning。
其中有很多人在網上發表了關於MySQL myIdam和InnoDB在存貯和讀取方面的差異。暫時還沒有做過度研究。
基本測試都是基於使用[事務]和不使用[事務],進行對比。MySQL對於[非事務表]速度會比較塊。
原因:待查證。
猜測:設定了innodb_flush_log_at_trx_commit如果設置為1的話,那麼每次插入數據的時候都會自動提交,導致性能急劇下降,應該是跟刷新日志有關系,設置為0效率能夠看到明顯提升,當然,同樣你可以SQL中提交[SET AUTOCOMMIT = 0]來設置達到好的性能。另外,還聽說通過設置innodb_buffer_pool_size能夠提升InnoDB的性能。
通過上面的分析,在我們采用MySQL存儲引擎的時候要按需分配。針對不同的存儲引擎要采用不同的數據設計。
題目2:開發過程中,遇到糟糕的SQL語句你是怎麼解決的。
答:使用MySQL的[EXPLAIN]對SQL進行解釋。應該還有更多好方法。
MySQL常見問題可以查看:http://www.blags.org/MySQL-error-daquan-and-solutions/
MySQL存儲引擎的介紹 :http://dev.MySQL.com/doc/refman/5.1/zh/storage-engines.Html
以上如有不足之處,請大家幫忙補充,THK。