ホームページ データベース 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

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

セルフメディアで最も収益性の高い 5 つの分野は何ですか? 2024年のDouyinのサポートの方向性は何ですか? セルフメディアで最も収益性の高い 5 つの分野は何ですか? 2024年のDouyinのサポートの方向性は何ですか? Mar 22, 2024 am 10:11 AM

インターネットの急速な発展に伴い、セルフメディア業界はますます多くの人々の注目を集めるようになりました。この業界では、幅広い市場の見通しと収益性により、多くの注目を集めている分野があります。この記事では、セルフメディアの最も収益性の高い 5 つの分野を明らかにするとともに、セルフメディアの発展の機会をよりよく把握できるよう、2024 年の Douyin のサポートの方向性について説明します。 1. セルフメディアで最も収益性の高い 5 つの分野は何ですか?オンライン教育の台頭により、教育とトレーニングの分野の人気が高まっています。人々は、学問的なコースだけでなく、スキルトレーニングや職場での昇進など、知識とスキルの習得に積極的に投資します。セルフメディアクリエイターは、学生が学習にお金を払うよう引き付ける高品質の教育コンテンツを作成することで、収益を得ることができます。この傾向は人々が生涯学習に関心を持っていることを示しています

Tmall Elf Cloud アクセス サービスのアップグレード: 開発者料金が無料 Tmall Elf Cloud アクセス サービスのアップグレード: 開発者料金が無料 Jan 09, 2024 pm 10:06 PM

1月9日の当サイトのニュースによると、天猫エルフは最近、ゆんゆんアクセスサービスのアップグレードを発表し、アップグレードされたゆんゆんアクセスサービスは1月1日から無料モードから有料モードに変更される。このサイトには新機能と最適化が含まれています: クラウド プロトコルを最適化してデバイス接続の安定性を向上、主要カテゴリの音声制御を最適化、アカウント認証のアップグレード: Tmall Genie に開発者のサードパーティ アプリの表示機能を追加して、ユーザーがより速く更新できるようにしますアカウントのバインドに便利であり、同時に、開発者向けのサードパーティのアプリアカウント認証が追加され、Tmall Elf アカウントのワンクリックバインドをサポートし、端末画面の表示インタラクション機能が追加されました。音声インタラクションに加えて、 、ユーザーはアプリと画面のスピーカーを通じてデバイスを制御し、情報を取得できます。機器のステータス、新しいインテリジェントなシーン連携機能、新しい製品の属性とイベント、Tmall を定義するステータスまたはイベントとして報告できます。

大規模モデルの波にさらされる時系列予測に関する記事 大規模モデルの波にさらされる時系列予測に関する記事 Nov 06, 2023 am 08:13 AM

今日は時系列予測における大規模モデルの応用についてお話します。 NLP の分野における大規模モデルの開発に伴い、時系列予測の分野に大規模モデルを適用しようとする試みがますます増えています。この記事では、大規模モデルを時系列予測に適用する主な方法を紹介し、大規模モデル時代の時系列予測の研究方法を誰もが理解できるように、最近の関連研究をいくつかまとめます。 1. 大規模モデルの時系列予測手法 過去 3 か月の間に、大規模モデルの時系列予測作業が多数登場しましたが、基本的に 2 つのタイプに分類できます。書き直された内容: 1 つのアプローチは、時系列予測に NLP の大規模モデルを直接使用することです。この手法では、時系列予測に GPT や Llama などの大規模 NLP モデルを利用します。

幼少期の思い出を保存するために、開発者は古代のプログラミングを使用することにしました。これは、Flash でゲームを高解像度でリメイクしたものです。 幼少期の思い出を保存するために、開発者は古代のプログラミングを使用することにしました。これは、Flash でゲームを高解像度でリメイクしたものです。 Apr 11, 2023 pm 10:16 PM

2 年以上前、Adobe は 2020 年 12 月 31 日に Flash のサポートを終了するという注目を集める発表を行い、ひとつの時代の終わりを告げました。 2 年が経ち、Adobe はすでに Flash Player の初期バージョンのアーカイブをすべて公式 Web サイトから削除し、Flash ベースのコンテンツの実行をブロックしました。 Microsoft はまた、Adobe Flash Player のサポートを終了し、Microsoft ブラウザ上での実行を禁止しました。 Adobe Flash Player コンポーネントは、2021 年 7 月に Windows Update によって完全に削除されました。フラッシュ時

PyCharmとはどのようなツールですか?どの開発者に適していますか? PyCharmとはどのようなツールですか?どの開発者に適していますか? Feb 20, 2024 am 08:29 AM

PyCharm は、JetBrains によって開発された Python 統合開発環境 (IDE) です。 Python 開発者が Python コードをより効率的に作成、デバッグ、デプロイできる豊富な機能とツールを提供します。 PyCharm には、インテリジェントなコード補完、構文の強調表示、デバッガー、単体テスト ツール、バージョン管理の統合、コードのリファクタリングなど、多くの強力な機能があります。これらの機能により、開発者はコードの問題を迅速に特定し、コードの品質を向上させ、開発サイクルを加速することができます。

ウェブマン: 開発者の完璧な相棒 ウェブマン: 開発者の完璧な相棒 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 アプリケーション開発で最も人気のある言語の 1 つです。テクノロジーの発展に伴い、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