首頁 資料庫 mysql教程 新手必看:一步到位之InnoDB_MySQL

新手必看:一步到位之InnoDB_MySQL

Jun 01, 2016 pm 01:37 PM
開發者 領域

bitsCN.com

新手必看:一步到位之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。

   相关的选项有:

#InnoDB存储数据字典、内部数据结构的缓冲池,16MB 已经足够大了。

innodb_additional_mem_pool_size = 16M

 

#InnoDB用于缓存数据、索引、锁、插入缓冲、数据字典等

#如果是专用的DB服务器,且以InnoDB引擎为主的场景,通常可设置物理内存的50%

#如果是非专用DB服务器,可以先尝试设置成内存的1/4,如果有问题再调整

#默认值是8M,非常坑X,这也是导致很多人觉得InnoDB不如MyISAM好用的缘故

innodb_buffer_pool_size = 4G

#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

#最大连接错误次数,可适当加大,防止频繁连接错误后,前端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

#设置连接超时阀值,如果前端程序采用短连接,建议缩短这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格式存储

 

bitsCN.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1320
25
PHP教程
1269
29
C# 教程
1249
24
自媒體最賺錢的五大領域是什麼? 2024年抖音扶持方向為何? 自媒體最賺錢的五大領域是什麼? 2024年抖音扶持方向為何? Mar 22, 2024 am 10:11 AM

隨著網路的快速發展,自媒體產業成為了越來越多人的焦點。在這個行業中,有些領域因其廣闊的市場前景和盈利能力而備受矚目。本文將為您揭示自媒體最賺錢的五大領域,同時探討2024年抖音的扶持方向,幫助您更能掌握自媒體發展機會。一、自媒體最賺錢的五大領域是什麼?隨著線上教育的興起,教育培訓領域變得越來越受歡迎。人們願意為獲取知識和技能進行投資,這不僅包括學術課程,還包括技能培訓和職場提升等面向。自媒體創作者可以透過創作高品質的教育內容來吸引學員付費學習,從而實現盈利。這種趨勢顯示人們對於終身學習

天貓精靈雲端存取服務升級:免費開發者收費 天貓精靈雲端存取服務升級:免費開發者收費 Jan 09, 2024 pm 10:06 PM

本站1月9日消息,天貓精靈日前發布雲端雲端接入服務升級的公告,升級後的雲端雲端存取服務從1月1日起從免費模式變更為付費。本站附新增功能與最佳化:優化雲端協議,提升裝置連線的穩定性;優化重點品類的語音控制;帳號授權升級:新增天貓精靈中開發者三方App的展示功能,幫助使用者更快更方便進行帳號綁定,同時新增開發者三方App帳號授權支援一鍵綁定天貓精靈帳號;新增終端屏顯互動能力,除語音互動外,用戶可透過app、帶屏音箱控制設備、取得設備狀態;新增智慧場景連動能力,新產品的屬性、事件,可作為狀態或事件上報,定義天貓

一篇學會大模型浪潮下的時間序列預測 一篇學會大模型浪潮下的時間序列預測 Nov 06, 2023 am 08:13 AM

今天跟大家聊一聊大模型在時間序列預測的應用。隨著大模型在NLP領域的發展,越來越多的工作嘗試將大模型應用到時間序列預測領域。這篇文章介紹了大模型應用到時間序列預測的主要方法,並彙整了一些近期相關的工作,幫助大家理解大模型時代時間序列預測的研究方法。 1.大模型時間序列預測方法最近三個月湧現了許多大模型做時間序列預測的工作,基本上可以分為2種類型。重寫後的內容:一種方法是直接使用NLP的大型模型進行時間序列預測。在這種方法中,使用GPT、Llama等NLP大型模型來進行時間序列預測,關鍵在於如何將

為拯救童年回憶,開發者決定採用古法程式設計:用Flash高清重製了一款遊戲 為拯救童年回憶,開發者決定採用古法程式設計:用Flash高清重製了一款遊戲 Apr 11, 2023 pm 10:16 PM

兩年多前,Adobe 發布了一則引人注目的公告 —— 將在 2020 年 12 月 31 日終止支援 Flash,宣告了一個時代的結束。一晃兩年過去了,Adobe 早已從官方網站中刪除了 Flash Player 早期版本的所有存檔,並阻止基於 Flash 的內容運作。微軟也已經終止對 Adob​​​​e Flash Player 的支持,並禁止其在任何 Microsoft 瀏覽器上運行。 Adobe Flash Player 元件於 2021 年 7 月透過 Windows 更新永久刪除。當 Flash

PyCharm是什麼工具?適合哪些開發者使用? PyCharm是什麼工具?適合哪些開發者使用? Feb 20, 2024 am 08:29 AM

PyCharm是一款由JetBrains公司開發的Python整合開發環境(IDE)。它為Python開發者提供了豐富的功能和工具,幫助他們更有效率地編寫、偵錯和部署Python程式碼。 PyCharm具有許多強大的功能,包括智慧程式碼補全、語法高亮、偵錯器、單元測試工具、版本控制整合、程式碼重構等。這些功能使開發者能夠快速定位程式碼問題、提高程式碼質量,並加快開發週期。

Go語言的跨平台能力為開發者帶來了更多的創新和發展機會 Go語言的跨平台能力為開發者帶來了更多的創新和發展機會 Jul 04, 2023 am 08:03 AM

Go語言的跨平台能力為開發者帶來了更多的創新和發展機會隨著科技的不斷發展,軟體開發已成為各行各業的重要組成部分。而跨平台能力在軟體開發中扮演著至關重要的角色。 Go語言作為一種現代化的程式語言,具備強大的跨平台能力,為開發者提供了更多的創新和發展機會。本文將以程式碼範例的方式,介紹Go語言的跨平台特性及其應用。首先,Go語言具備與多個作業系統和平台的良好相容性

Webman:一個開發者的完美夥伴 Webman:一個開發者的完美夥伴 Aug 13, 2023 pm 02:25 PM

Webman:一個開發者的完美夥伴隨著網路的發展,Web開發已經成為了一個非常重要的領域。在這個領域,開發者需要掌握多種技術和工具來建立高效、可靠的Web應用程式。而作為一個開發者的完美夥伴,Webman提供了許多有用的功能和工具,大大簡化了開發過程,並提高了效率。 Webman是一個基於Python語言的Web開發框架,它結合了許多常用的工具和函式庫,給予開發

PHP 8.3:開發者必知的重要更新 PHP 8.3:開發者必知的重要更新 Nov 27, 2023 am 10:19 AM

PHP是一種開源的伺服器端程式語言,是Web應用程式開發中最受歡迎的語言之一。隨著技術的不斷發展,PHP也不斷更新和改進。最新的PHP版本是8.3,這個版本帶來了一些重要的更新和改進,本文將介紹一些開發者必知的重要更新。類型和屬性改進PHP8.3引入了一些對類型和屬性的改進,其中最受歡迎的是在類型聲明中引入了新的union類型。 Union類型允許函數的參數

See all articles