程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 新手必看:一步到位之InnoDB

新手必看:一步到位之InnoDB

編輯:MySQL綜合教程

新手必看:一步到位之InnoDB      前言:MySQL發展到今天,InnoDB引擎已經作為絕對的主力,除了像大數據量分析等比較特殊領域需求外,它適用於眾多場景。然而,仍有不少開發者還在“執迷不悟”的使用MyISAM引擎,覺得對InnoDB無法把握好,還是MyISAM簡單省事,還能支持快速COUNT(*)。本文是由於最近幾天幫忙處理discuz論壇有感而發,希望能對廣大開發者有幫助。  www.2cto.com        1. 快速認識InnoDB    InnoDB是MySQL下使用最廣泛的引擎,它是基於MySQL的高可擴展性和高性能存儲引擎,從5.5版本開始,它已經成為了默認引擎。    InnODB引擎支持眾多特性: a) 支持ACID,簡單地說就是支持事務完整性、一致性;  b) 支持行鎖,以及類似ORACLE的一致性讀,多用戶並發; c) 獨有的聚集索引主鍵設計方式,可大幅提升並發讀寫性能; d) 支持外鍵;  www.2cto.com   e) 支持崩潰數據自修復;    InnoDB有這麼多特性,比MyISAM來的優秀多了,還猶豫什麼,果斷的切換到InnoDB引擎吧     2. 修改InnoDB配置選項    可以選擇官方版本,或者Percona的分支,如果不知道在哪下載,就google吧。    安裝完MySQL後,需要適當修改下my.cnf配置文件,針對InnoDB相關的選項做一些調整,才能較好的運行InnoDB。    相關的選項有: #InnoDB存儲數據字典、內部數據結構的緩沖池,16MB 已經足夠大了。 innodb_additional_mem_pool_size = 16M   #InnoDB用於緩存數據、索引、鎖、插入緩沖、數據字典等 #如果是專用的DB服務器,且以InnoDB引擎為主的場景,通常可設置物理內存的50% #如果是非專用DB服務器,可以先嘗試設置成內存的1/4,如果有問題再調整 #默認值是8M,非常坑X,這也是導致很多人覺得InnoDB不如MyISAM好用的緣故 innodb_buffer_pool_size = 4G   www.2cto.com   #InnoDB共享表空間初始化大小,默認是 10MB,也非常坑X,改成 1GB,並且自動擴展 innodb_data_file_path = ibdata1:1G:autoextend   #如果不了解本選項,建議設置為1,能較好保護數據可靠性,對性能有一定影響,但可控 innodb_flush_log_at_trx_commit = 1   #InnoDB的log buffer,通常設置為 64MB 就足夠了 innodb_log_buffer_size = 64M   #InnoDB redo log大小,通常設置256MB 就足夠了 innodb_log_file_size = 256M   #InnoDB redo log文件組,通常設置為 2 就足夠了 innodb_log_files_in_group = 2   #啟用InnoDB的獨立表空間模式,便於管理 innodb_file_per_table = 1   #啟用InnoDB的status file,便於管理員查看以及監控等 innodb_status_file = 1   #設置事務隔離級別為 READ-COMMITED,提高事務效率,通常都滿足事務一致性要求 transaction_isolation = READ-COMMITTED     在這裡,其他配置選項也需要注意: #設置最大並發連接數,如果前端程序是PHP,可適當加大,但不可過大 #如果前端程序采用連接池,可適當調小,避免連接數過大 max_connections = 60   www.2cto.com   #最大連接錯誤次數,可適當加大,防止頻繁連接錯誤後,前端host被mysql拒絕掉 max_connect_errors = 100000   #設置慢查詢閥值,建議設置最小的 1 秒 long_query_time = 1   #設置臨時表最大值,這是每次連接都會分配,不宜設置過大 max_heap_table_size 和 tmp_table_size 要設置一樣大 max_heap_table_size = 96M tmp_table_size = 96M   #每個連接都會分配的一些排序、連接等緩沖,一般設置為 2MB 就足夠了 sort_buffer_size = 2M join_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 2M   #建議關閉query cache,有些時候對性能反而是一種損害 query_cache_size = 0   #如果是以InnoDB引擎為主的DB,專用於MyISAM引擎的 key_buffer_size 可以設置較小,8MB 已足夠 #如果是以MyISAM引擎為主,可設置較大,但不能超過4G #在這裡,強烈建議不使用MyISAM引擎,默認都是用InnoDB引擎 key_buffer_size = 8M   www.2cto.com   #設置連接超時閥值,如果前端程序采用短連接,建議縮短這2個值 #如果前端程序采用長連接,可直接注釋掉這兩個選項,是用默認配置(8小時) interactive_timeout = 120 wait_timeout = 120    3. 開始使用InnoDB引擎    修改完配置文件,即可啟動MySQL。啟動完畢後,在MySQL的datadir目錄下,若產生以下幾個文件,則表示應該可以使用InnoDB引擎了。 -rw-rw---- 1 mysql mysql 1.0G Sep 21 17:25 ibdata1 -rw-rw---- 1 mysql mysql 256M Sep 21 17:25 ib_logfile0 -rw-rw---- 1 mysql mysql 256M Sep 21 10:50 ib_logfile1    登錄MySQL後,執行命令,確認已啟用InnoDB引擎: (root:imysql.cn:Thu Oct 15 09:16:22 2009)[mysql]> show engines; +------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine     | Support | Comment                                                        | Transactions | XA   | Savepoints | +------------+---------+----------------------------------------------------------------+--------------+------+------------+ | InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |    接下來創建一個InnoDB表: (root:imysql.cn:Thu Oct 15 09:16:22 2009)[mysql]>  CREATE TABLE my_innodb_talbe( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(20) NOT NULL DEFAULT \'\', passwd VARCHAR(32) NOT NULL DEFAULT \'\', PRIMARY KEY(id), UNIQUE KEY `idx_name`(name) ) ENGINE = InnoDB;    有幾個和MySQL(尤其是InnoDB引擎)數據表設計相關的建議,希望開發者朋友能遵循: a) 所有InnoDB數據表都創建一個和業務無關的自增數字型作為主鍵,對保證性能很有幫助; b) 杜絕使用text/blob,確實需要使用的,盡可能拆分出去成一個獨立的表; c) 時間戳建議使用 TIMESTAMP 類型存儲; d) IPV4 地址建議用 INT UNSIGNED 類型存儲; e) 性別等非是即非的邏輯,建議采用 TINYINT 存儲,而不是 CHAR(1); f) 存儲較長文本內容時,建議采用JSON/BSON格式存儲  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved