亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL的InnoDB引擎入門學習教程

2024-07-24 13:08:13
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了MySQL的InnoDB引擎入門學習教程,對InnoDB的存儲結構有一個較好的總結,需要的朋友可以參考下

MySQL發展到今天,InnoDB引擎已經作為絕對的主力,除了像大數據量分析等比較特殊領域需求外,它適用于眾多場景。然而,仍有不少開發者還在“執迷不悟”的使用MyISAM引擎,覺得對InnoDB無法把握好,還是MyISAM簡單省事,還能支持快速COUNT(*)。本文是由于最近幾天幫忙處理discuz論壇有感而發,希望能對廣大開發者有幫助。

1. 快速認識InnoDB

InnoDB是MySQL下使用最廣泛的引擎,它是基于MySQL的高可擴展性和高性能存儲引擎,從5.5版本開始,它已經成為了默認引擎。

InnODB引擎支持眾多特性:

a) 支持ACID,簡單地說就是支持事務完整性、一致性;

b) 支持行鎖,以及類似ORACLE的一致性讀,多用戶并發;

c) 獨有的聚集索引主鍵設計方式,可大幅提升并發讀寫性能;

d) 支持外鍵;

e) 支持崩潰數據自修復;

InnoDB有這么多特性,比MyISAM來的優秀多了,還猶豫什么,果斷的切換到InnoDB引擎吧 :)

2. 修改InnoDB配置選項

可以選擇官方版本,或者Percona的分支,如果不知道在哪下載,就google吧。

安裝完MySQL后,需要適當修改下my.cnf配置文件,針對InnoDB相關的選項做一些調整,才能較好的運行InnoDB。

相關的選項有:

 

 
  1. #InnoDB存儲數據字典、內部數據結構的緩沖池,16MB 已經足夠大了。 
  2. innodb_additional_mem_pool_size = 16M 
  3.  
  4. #InnoDB用于緩存數據、索引、鎖、插入緩沖、數據字典等 
  5. #如果是專用的DB服務器,且以InnoDB引擎為主的場景,通??稍O置物理內存的50% 
  6. #如果是非專用DB服務器,可以先嘗試設置成內存的1/4,如果有問題再調整 
  7. #默認值是8M,非??覺,這也是導致很多人覺得InnoDB不如MyISAM好用的緣故 
  8. innodb_buffer_pool_size = 4G 
  9.  
  10. #InnoDB共享表空間初始化大小,默認是 10MB,也非??覺,改成 1GB,并且自動擴展 
  11. innodb_data_file_path = ibdata1:1G:autoextend 
  12.  
  13. #如果不了解本選項,建議設置為1,能較好保護數據可靠性,對性能有一定影響,但可控 
  14. innodb_flush_log_at_trx_commit = 1 
  15.  
  16. #InnoDB的log buffer,通常設置為 64MB 就足夠了 
  17. innodb_log_buffer_size = 64M 
  18.  
  19. #InnoDB redo log大小,通常設置256MB 就足夠了 
  20. innodb_log_file_size = 256M 
  21.  
  22. #InnoDB redo log文件組,通常設置為 2 就足夠了 
  23. innodb_log_files_in_group = 2 
  24.  
  25. #啟用InnoDB的獨立表空間模式,便于管理 
  26. innodb_file_per_table = 1 
  27.  
  28. #啟用InnoDB的status file,便于管理員查看以及監控等 
  29. innodb_status_file = 1 
  30.  
  31. #設置事務隔離級別為 READ-COMMITED,提高事務效率,通常都滿足事務一致性要求 
  32. transaction_isolation = READ-COMMITTED  
  33. 在這里,其他配置選項也需要注意: 
  34.  
  35. #設置最大并發連接數,如果前端程序是PHP,可適當加大,但不可過大 
  36. #如果前端程序采用連接池,可適當調小,避免連接數過大 
  37. max_connections = 60 
  38.  
  39. #最大連接錯誤次數,可適當加大,防止頻繁連接錯誤后,前端host被mysql拒絕掉 
  40. max_connect_errors = 100000 
  41.  
  42. #設置慢查詢閥值,建議設置最小的 1 秒 
  43. long_query_time = 1 
  44.  
  45. #設置臨時表最大值,這是每次連接都會分配,不宜設置過大 max_heap_table_size 和 tmp_table_size 要設置一樣大 
  46. max_heap_table_size = 96M 
  47. tmp_table_size = 96M 
  48.  
  49. #每個連接都會分配的一些排序、連接等緩沖,一般設置為 2MB 就足夠了 
  50. sort_buffer_size = 2M 
  51. join_buffer_size = 2M 
  52. read_buffer_size = 2M 
  53. read_rnd_buffer_size = 2M 
  54.  
  55. #建議關閉query cache,有些時候對性能反而是一種損害 
  56. query_cache_size = 0 
  57.  
  58. #如果是以InnoDB引擎為主的DB,專用于MyISAM引擎的 key_buffer_size 可以設置較小,8MB 已足夠 
  59. #如果是以MyISAM引擎為主,可設置較大,但不能超過4G 
  60. #在這里,強烈建議不使用MyISAM引擎,默認都是用InnoDB引擎 
  61. key_buffer_size = 8M 
  62.  
  63. #設置連接超時閥值,如果前端程序采用短連接,建議縮短這2個值 
  64. #如果前端程序采用長連接,可直接注釋掉這兩個選項,是用默認配置(8小時) 
  65. interactive_timeout = 120 
  66. wait_timeout = 120 

3. 開始使用InnoDB引擎

修改完配置文件,即可啟動MySQL。啟動完畢后,在MySQL的datadir目錄下,若產生以下幾個文件,則表示應該可以使用InnoDB引擎了。

 

 
  1. -rw-rw---- 1 mysql mysql 1.0G Sep 21 17:25 ibdata1 
  2. -rw-rw---- 1 mysql mysql 256M Sep 21 17:25 ib_logfile0 
  3. -rw-rw---- 1 mysql mysql 256M Sep 21 10:50 ib_logfile1 

登錄MySQL后,執行命令,確認已啟用InnoDB引擎:

 

 
  1. (root:imysql.cn:Thu Oct 15 09:16:22 2009)[mysql]> show engines; 
  2. +------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
  3. | Engine | Support | Comment | Transactions | XA | Savepoints | 
  4. +------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
  5. | InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | 

接下來創建一個InnoDB表:

 

 
  1. (root:imysql.cn:Thu Oct 15 09:16:22 2009)[mysql]>  
  2. CREATE TABLE my_innodb_talbe( 
  3. id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
  4. name VARCHAR(20) NOT NULL DEFAULT ''
  5. passwd VARCHAR(32) NOT NULL DEFAULT ''
  6. PRIMARY KEY(id), 
  7. UNIQUE KEY `idx_name`(name) 
  8. ) ENGINE = InnoDB; 

有幾個和MySQL(尤其是InnoDB引擎)數據表設計相關的建議,希望開發者朋友能遵循:

a) 所有InnoDB數據表都創建一個和業務無關的自增數字型作為主鍵,對保證性能很有幫助;

b) 杜絕使用text/blob,確實需要使用的,盡可能拆分出去成一個獨立的表;

c) 時間戳建議使用 TIMESTAMP 類型存儲;

d) IPV4 地址建議用 INT UNSIGNED 類型存儲;

e) 性別等非是即非的邏輯,建議采用 TINYINT 存儲,而不是 CHAR(1);

f) 存儲較長文本內容時,建議采用JSON/BSON格式存儲;

4.了解InnoDB的存儲結構

從物理意義上來講,InnoDB表由共享表空間、日志文件組(redo文件組)、表結構定義文件組成。若將innodb_file_per_table設置為on,則系統將為每一個表單獨的生成一個table_name.ibd的文件,在此文件中,存儲與該表相關的數據、索引、表的內部數據字典信息。表結構文件則以.frm結尾,這與存儲引擎無關。

以下為InnoDB的表空間結構圖:

MySQL的InnoDB引擎入門學習教程

在InnoDB存儲引擎中,默認表空間文件是ibdata1,初始化為10M,且可以擴展,如下圖所示:

MySQL的InnoDB引擎入門學習教程

實際上,InnoDB的表空間文件是可以修改的,使用以下語句就可以修改:

Innodb_data_file_path=ibdata1:370M;ibdata2:50M:autoextend

使用共享表空間存儲方式時,Innodb的所有數據保存在一個單獨的表空間里面,而這個表空間可以由很多個文件組成,一個表可以跨多個文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制。從Innodb的官方文檔中可以看到,其表空間的最大限制為64TB,也就是說,Innodb的單表限制基本上也在64TB左右了,當然這個大小是包括這個表的所有索引等其他相關數據。

而在使用單獨表空間存儲方式時,每個表的數據以一個單獨的文件來存放,這個時候的單表限制,又變成文件系統的大小限制了。

以下即為不同平臺下,單獨表空間文件最大限度。

Operating System File-size Limit

Win32 w/ FAT/FAT32 2GB/4GB

Win32 w/ NTFS 2TB (possibly larger)

Linux 2.4+ (using ext3 file system) 4TB

Solaris 9/10 16TB

MacOS X w/ HFS+ 2TB

NetWare w/NSS file system 8TB

以下是MySQL文檔中的內容:

Windows用戶請注意: FAT和VFAT (FAT32)不適合MySQL的生產使用。應使用NTFS。

共享表空間與獨占表空間可以通過參數innodb_file_per_table來轉換,若為1,則開啟獨占表空間,否則,開啟共享表存儲。

在服務器資源有限,單表數據不是特別多的情況下, 獨立表空間明顯比共享方式效率更高 . 但是MySQL 默認是共享表空間 。

具體的共享表空間和獨立表空間優缺點如下:

共享表空間:

優點:

可以放表空間分成多個文件存放到各個磁盤上(表空間文件大小不受表大小的限制,如一個表可以分布在不同步的文件上)。數據和文件放在一起方便管理。

缺點:

所有的數據和索引存放到一個文件中以為著將有一個很常大的文件,雖然可以把一個大文件分成多個小文件,但是多個表及索引在表空間中混合存儲,這樣對于一個表做了大量刪除操作后表空間中將會有大量的空隙,特別是對于統計分析,日值系統這類應用最不適合用共享表空間。

獨立表空間:在配置文件(my.cnf)中設置: innodb_file_per_table

優點:

1. 每個表都有自已獨立的表空間。

2. 每個表的數據和索引都會存在自已的表空間中。

3. 可以實現單表在不同的數據庫中移動。

4. 空間可以回收(除drop table操作處,表空不能自已回收)

a) Drop table操作自動回收表空間,如果對于統計分析或是日值表,刪除大量數據后可以通過:alter table TableName engine=innodb;回縮不用的空間。

b) 對于使innodb-plugin的Innodb使用truncate table也會使空間收縮。

c) 對于使用獨立表空間的表,不管怎么刪除,表空間的碎片不會太嚴重的影響性能,而且還有機會處理。

缺點:

單表增加過大,如超過100個G。

對于啟用了innodb_file_per_table 的參數選項之后,在每個表對應的.idb文件內只是存放了數據、索引和插入緩沖,而撤銷(undo)信息,系統事務信息,二次寫緩沖等還是存放在了原來的共享表空間內。

數據段即B+樹的葉節點,索引段即為B+樹的非索引節點。

InnoDB存儲引擎的管理是由引擎本身完成的,表空間是由分散的頁和段組成。

區由64個連續的頁組成,每個頁大小為16K,即每個區大小為1MB,創建新表時,先有32頁大小的碎片頁存放數據,使用完后才是區的申請,(InnoDB最多每次申請4個區,保證數據的順序性能)

頁類型有:數據頁、Undo頁、系統頁、事務數據頁、插入緩沖位圖頁、以及插入緩沖空閑列表頁。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品在线观看| 亚洲欧美日韩精品| 91国内精品久久| 欧美综合国产精品久久丁香| 97香蕉超级碰碰久久免费的优势| 久久伊人色综合| 久久久久北条麻妃免费看| 欧美亚洲午夜视频在线观看| 精品人伦一区二区三区蜜桃网站| 97视频在线播放| 欧美日韩裸体免费视频| 久久这里只有精品视频首页| 亚洲xxxx在线| 日韩福利伦理影院免费| 久久99国产精品自在自在app| 91国内免费在线视频| 国产成人涩涩涩视频在线观看| 中文字幕日韩专区| 美女扒开尿口让男人操亚洲视频网站| 北条麻妃一区二区在线观看| 国产69精品久久久久9999| 日韩精品在线私人| 欧美夜福利tv在线| 91丨九色丨国产在线| 久久国产精品久久国产精品| 久久久久国色av免费观看性色| 久久久久久伊人| 麻豆乱码国产一区二区三区| 亚洲va国产va天堂va久久| 91精品国产777在线观看| 久久久久久久久久亚洲| 久青草国产97香蕉在线视频| 俺去了亚洲欧美日韩| 狠狠做深爱婷婷久久综合一区| 亚洲性xxxx| 日韩在线观看免费| 欧美精品在线视频观看| 久久综合伊人77777蜜臀| 色综合色综合网色综合| 日韩av网站导航| 久久久精品免费| 欧美成人免费在线视频| 亚洲三级 欧美三级| 亚洲女人天堂成人av在线| 色噜噜国产精品视频一区二区| 一本一本久久a久久精品综合小说| 日韩国产在线看| 欧美成aaa人片免费看| 精品日韩中文字幕| 精品国偷自产在线| 亚洲免费伊人电影在线观看av| 91欧美精品午夜性色福利在线| 精品久久久久久| 亚洲欧美国产另类| 欧美日韩在线另类| 精品亚洲一区二区| 久久久久久久久久久亚洲| 韩国19禁主播vip福利视频| 欧美精品免费在线| 日韩在线高清视频| 国产精品18久久久久久首页狼| 精品国产区一区二区三区在线观看| 久久天天躁狠狠躁夜夜躁| 日韩欧美在线视频日韩欧美在线视频| 91免费国产网站| 亚洲精品福利免费在线观看| 日韩电影中文 亚洲精品乱码| 中文字幕日韩在线播放| 久久久精品视频在线观看| 国产不卡av在线免费观看| 欧美贵妇videos办公室| 国产精品吴梦梦| 国产亚洲精品久久久| 亚洲xxxx视频| 亚洲精品suv精品一区二区| 日韩黄色高清视频| 久久精品99久久久香蕉| 成人免费看黄网站| 成人综合网网址| 久久久久国产精品免费| 136fldh精品导航福利| 亚洲va欧美va在线观看| 日本成人在线视频网址| 日韩中文在线不卡| 最近2019免费中文字幕视频三| 国产亚洲精品久久久久动| 日本精品久久久| 欧美性极品xxxx娇小| 成人黄色av网| 欧美在线视频a| 欧美另类第一页| 中文字幕久久久av一区| 国产精品久久久久久久久粉嫩av| 国产亚洲aⅴaaaaaa毛片| 在线观看久久久久久| 日韩av网站大全| 中文字幕一区日韩电影| 国产精品欧美亚洲777777| 久久在线免费视频| 欧美影院久久久| 亚洲第一视频网| 这里只有精品视频在线| 欧美电影在线播放| 97在线视频免费观看| 亚洲视频免费一区| 91高清在线免费观看| 日韩毛片在线看| 中文字幕亚洲在线| 国产91在线播放精品91| 日韩激情视频在线播放| 亚洲香蕉av在线一区二区三区| 国产婷婷97碰碰久久人人蜜臀| 色视频www在线播放国产成人| 亚洲毛片在线观看.| 欧美在线激情视频| 中文字幕精品国产| 国产成人精品av在线| 国产一区二区三区18| 日韩在线免费视频| 久久理论片午夜琪琪电影网| 亚洲乱码国产乱码精品精| 亚洲欧美成人精品| 亚洲精品电影网站| 上原亚衣av一区二区三区| 亚洲3p在线观看| 九九热这里只有在线精品视| 欧美国产日产韩国视频| 久久伊人精品一区二区三区| 日韩网站免费观看| 国产精品视频午夜| 国语自产精品视频在线看抢先版图片| 欧美一级淫片videoshd| 国产精品日韩在线播放| 国产专区欧美专区| 2019国产精品自在线拍国产不卡| 日本三级韩国三级久久| 亚洲成人精品视频| 久久久久久久一| 精品国产电影一区| 日韩高清电影好看的电视剧电影| 美日韩精品免费观看视频| 国产美女久久精品| 亚洲激情视频在线播放| 91精品国产乱码久久久久久久久| 中文字幕国产精品久久| 亚洲老司机av| 久久精品国产一区| 久久九九免费视频| 日韩av片电影专区| 欧美限制级电影在线观看| 91在线国产电影| 日本精品免费一区二区三区| 久久影视电视剧凤归四时歌| 久久久久久久国产精品| 成人在线中文字幕| 激情成人在线视频| 久久久在线观看| 国产女精品视频网站免费| www.日本久久久久com.| 欧美色欧美亚洲高清在线视频| 九九久久综合网站| 欧美日韩美女在线| 国产精品美女久久久免费| 久久精品国产电影|