mysql myisam innodb 區別

最近連續接到了兩次tencent的電話面試,固然不是同一個部門。都涉及到了一個mysql的基礎知識問題。爲了防止第三次打電話來,備註下。^^。 題目1:講講你對mysql myisam,innodb的認識。而後你認爲他們的區別在那裏?爲何? 答:這兩個是mysql主要存儲引擎。 簡要介紹來自官網。 簡要介紹:MyIsam MyISAM是 默認存儲引擎。它基於更老的ISAM代碼,但有不少有用的擴展。(注意MySQL 5.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次插入/更新的負荷。 簡單歸納幾點以下: 經過不上不難看出,MyIsam InnoDB的用途,Myisam主要適用於中小型數據量。InnoDB引擎適用於大數據量。上面已經講得很清楚拉。著名的開源電子商務系統[magento]就是採用InnoDB建立。 MyIsam寫入速度比InnoDB快。 在使用InnoDB時候須要對my.cnf進行配置以保證mysql達到最大效率。詳細能夠查看官網[inndo性能調節]:http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#innodb-tuning。 其中有不少人在網上發表了關於mysql MyIsam 和 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。
相關文章
相關標籤/搜索