데이터 베이스 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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

셀프미디어에서 가장 수익성이 높은 다섯 가지 영역은 무엇입니까? 2024년 더우인의 지원 방향은 무엇인가요? 셀프미디어에서 가장 수익성이 높은 다섯 가지 영역은 무엇입니까? 2024년 더우인의 지원 방향은 무엇인가요? Mar 22, 2024 am 10:11 AM

인터넷의 급속한 발전으로 셀프 미디어 산업은 점점 더 많은 사람들의 관심의 초점이 되었습니다. 이 업계에서는 광범위한 시장 전망과 수익성으로 인해 일부 영역이 많은 주목을 받고 있습니다. 이 기사에서는 셀프 미디어의 가장 수익성이 높은 다섯 가지 영역을 공개하고, 셀프 미디어의 발전 기회를 더 잘 파악하는 데 도움이 되도록 2024년 Douyin의 지원 방향에 대해 논의합니다. 1. 셀프미디어의 가장 수익성이 높은 5대 분야는 무엇입니까? 온라인 교육의 등장으로 교육훈련 분야가 점점 대중화되고 있습니다. 사람들은 학문적 과정뿐만 아니라 기술 훈련과 직장 발전에도 지식과 기술을 습득하는 데 기꺼이 투자합니다. 셀프 미디어 제작자는 학생들이 학습 비용을 지불하도록 유도하는 고품질 교육 콘텐츠를 제작하여 수익성을 달성할 수 있습니다. 이러한 추세는 사람들이 평생학습에 관심을 갖고 있음을 보여준다.

Tmall Elf Cloud 액세스 서비스 업그레이드: 개발자 비용 무료 Tmall Elf Cloud 액세스 서비스 업그레이드: 개발자 비용 무료 Jan 09, 2024 pm 10:06 PM

9일 이 사이트의 소식에 따르면 티몰 엘프는 최근 윈윈 접속 서비스 업그레이드를 발표했다. 업그레이드된 윈윈 접속 서비스가 1월 1일부터 무료 모드에서 유료 모드로 변경된다. 이 사이트에는 새로운 기능과 최적화가 포함되어 있습니다. 클라우드 프로토콜을 최적화하여 장치 연결의 안정성을 향상합니다. 주요 카테고리에 대한 음성 제어를 최적화합니다. 계정 인증 업그레이드: 사용자가 더 빠르게 업데이트할 수 있도록 Tmall Genie에 개발자 타사 앱의 표시 기능을 추가합니다. 계정 바인딩에 편리합니다. 동시에 Tmall Elf 계정의 원클릭 바인딩을 지원하는 타사 앱 계정 인증이 추가되었습니다. , 사용자는 앱과 화면 스피커를 통해 장치를 제어하고 정보를 얻을 수 있습니다. 장비 상태, 새로운 제품 속성 및 이벤트는 Tmall을 정의하는 상태 또는 이벤트로 보고될 수 있습니다.

대규모 모델의 물결에 따른 시계열 예측에 관한 기사 대규모 모델의 물결에 따른 시계열 예측에 관한 기사 Nov 06, 2023 am 08:13 AM

오늘은 시계열 예측에 대형 모델을 적용하는 방법에 대해 말씀드리겠습니다. NLP 분야에서 대형 모델이 개발되면서 시계열 예측 분야에 대형 모델을 적용하려는 연구가 점점 더 많아지고 있습니다. 본 논문에서는 대형모형을 시계열 예측에 적용하는 주요 방법을 소개하고, 대형모형 시대의 시계열 예측 연구방법에 대한 이해를 돕기 위해 최근 관련 연구를 요약한다. 1. 대형 모델 시계열 예측 방법 지난 3개월 동안 많은 대형 모델 시계열 예측 작업이 등장했는데 이는 기본적으로 두 가지 유형으로 나눌 수 있습니다. 재작성된 콘텐츠: 한 가지 접근 방식은 시계열 예측을 위해 NLP의 대규모 모델을 직접 사용하는 것입니다. 이 방법에서는 GPT, Llama와 같은 대규모 NLP 모델을 시계열 예측에 사용합니다.

어린 시절의 추억을 보존하기 위해 개발자는 고대 프로그래밍을 사용하기로 결정했습니다. 즉, Flash로 게임을 고화질로 리메이크하는 것입니다. 어린 시절의 추억을 보존하기 위해 개발자는 고대 프로그래밍을 사용하기로 결정했습니다. 즉, Flash로 게임을 고화질로 리메이크하는 것입니다. Apr 11, 2023 pm 10:16 PM

2년여 전, Adobe는 2020년 12월 31일에 Flash 지원을 종료하고 시대의 종말을 알린다는 주목할만한 발표를 했습니다. 2년이 지난 지금, Adobe는 이미 공식 웹사이트에서 Flash Player 초기 버전의 모든 아카이브를 제거하고 Flash 기반 컨텐츠 실행을 차단했습니다. 또한 Microsoft는 Adobe Flash Player에 대한 지원을 종료하고 모든 Microsoft 브라우저에서 실행을 금지했습니다. Adobe Flash Player 구성 요소는 2021년 7월 Windows 업데이트를 통해 영구적으로 제거되었습니다. 플래시할 때

PyCharm은 어떤 도구인가요? 어떤 개발자에게 적합합니까? PyCharm은 어떤 도구인가요? 어떤 개발자에게 적합합니까? Feb 20, 2024 am 08:29 AM

PyCharm은 JetBrains에서 개발한 Python 통합 개발 환경(IDE)입니다. Python 개발자에게 Python 코드를 보다 효율적으로 작성, 디버그 및 배포하는 데 도움이 되는 풍부한 기능과 도구를 제공합니다. PyCharm에는 지능형 코드 완성, 구문 강조, 디버거, 단위 테스트 도구, 버전 제어 통합, 코드 리팩토링 등을 포함한 많은 강력한 기능이 있습니다. 이러한 기능을 통해 개발자는 코드 문제를 빠르게 찾고, 코드 품질을 개선하고, 개발 주기를 가속화할 수 있습니다.

웹맨: 개발자의 완벽한 동반자 웹맨: 개발자의 완벽한 동반자 Aug 13, 2023 pm 02:25 PM

Webman: 개발자의 완벽한 파트너 인터넷의 발달과 함께 웹 개발은 매우 중요한 분야가 되었습니다. 이 분야에서 개발자는 효율적이고 안정적인 웹 애플리케이션을 구축하기 위해 다양한 기술과 도구를 숙지해야 합니다. 개발자의 완벽한 파트너인 Webman은 개발 프로세스를 크게 단순화하고 효율성을 향상시키는 많은 유용한 기능과 도구를 제공합니다. Webman은 Python 언어를 기반으로 하는 웹 개발 프레임워크로, 일반적으로 사용되는 많은 도구와 라이브러리를 결합하여 개발자에게 제공합니다.

PHP 8.3: 개발자가 알아야 할 중요 업데이트 PHP 8.3: 개발자가 알아야 할 중요 업데이트 Nov 27, 2023 am 10:19 AM

PHP는 오픈 소스 서버 측 프로그래밍 언어이며 웹 애플리케이션 개발에 가장 널리 사용되는 언어 중 하나입니다. 기술이 계속 발전함에 따라 PHP는 지속적으로 업데이트되고 개선됩니다. 최신 PHP 버전은 8.3입니다. 이 버전에서는 개발자가 알아야 할 몇 가지 중요한 업데이트를 소개합니다. 유형 및 속성 개선 PHP 8.3에는 유형 및 속성에 대한 여러 가지 개선 사항이 도입되었으며, 그 중 가장 인기 있는 것은 유형 선언에 새로운 공용체 유형이 도입된 것입니다. Union 유형은 함수에 대한 매개변수를 허용합니다.

Golang: AI 개발자를 위한 첫 번째 선택 Golang: AI 개발자를 위한 첫 번째 선택 Sep 09, 2023 pm 12:10 PM

Golang: AI 개발자를 위한 첫 번째 선택 요약: 인공 지능(AI)은 점차 우리 일상 생활에서 없어서는 안 될 부분이 되어가고 있습니다. AI 기술의 급속한 발전으로 인해 점점 더 많은 개발자가 AI를 사용하여 다양한 문제를 해결하는 방법을 모색하고 있습니다. AI 개발에서는 올바른 프로그래밍 언어를 선택하는 것이 특히 중요합니다. 많은 프로그래밍 언어 중에서 Golang(Go라고도 함)은 고유한 장점으로 인해 점점 더 많은 AI 개발자가 선택하고 있습니다.

See all articles