MySQL--インデックスとトランザクションストレージエンジンMyLSAMとInnoDBの(理論セクション)

インデックスの概念

カタログでのデータベースのインデックス作成と同様の図書

在一本书中,无须阅读整本书,利用目录就可以快速查找所需信息
书中的目录是一个词语列表,其中注明了包含各个词的页码

データベースのインデックス

在数据库中,索引数据库程序无须对整个表进行扫描,就可以在其中找到所需数据
数据库中的索引是某个表中一列或者若干列值的集合,以及物理标识这些值的数据页的逻辑指针清单

インデックスの役割

设置了合适的索引之后,数据库利用各种快速的定位技术,能够大大加快查询速率;
特别是当表很大时,或者查询涉及到多个表时,使用索引可使查询加快成千倍;
可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本;
通过创建唯一性索引保证数据表数据的唯一性;
可以加快表与表之间的连接;
在使用分组和排序时,可大大减少分组和排序时间;

カテゴリーインデックス

一般的な指標

这是最基本的索引类型,而且它没有唯一性之类的限制

ユニークインデックス

这种索引和前面的"普通索引"基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一

主キー

主键是一种唯一性索引,但它必须制定为"PRIMARY KEY"

フルテキストインデックス

全文索引的类型是FULLTEXT,可以在VARCHAR或者TEXT类型的列上创建

シングルとマルチカラムインデックスのインデックス

索引可以是单列上创建的索引,也可以是在多列上创建的索引

の原則に基づいてインデックスを作成します

表的主键,外键必须有索引;
数据量超过300行的表应该有索引;
经常与其他表进行连接的表,在连接字段上应该建立索引;
唯一性太差的字段不适合建立索引;
更新太频繁的字段不适合创建索引;
经常出现在where子句中的字段,特别是大表的字段,应该建立索引;
索引应该建在选择性高的字段上;
索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

インデックスを作成する方法

ビジネスニーズに応じて、適切なインデックスを選択した後、CREATE INDEXをインデックスを作成するために使用することができます

CREATE INDEX加上各个索引关键字便可创建各个类型的索引

通常のインデックスを作成します。

CREATE INDEX <索引的名字> ON tablename (列的列表);

通常のインデックスを作成します。

CREATE INDEX salary_index ON IT_salary(薪资);

一意のインデックスを作成します。

CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);

一意のインデックスの例を作成します。

CREATE UNIQUE INDEX salary_unique_index ON IT_salary(姓名);

主キーのインデックスを作成します。

CREATE TABLE tablename ( [...],PRIMARY KEY (列的列表));
ALTER TABLE tablename ADD PRIMARY KEY (列的列表);

主キー索引の例

ALTER TABLE IT_salary ADD PRIMARY KEY (员工ID);

インデックス表示

SHOW INDEX FROM tablename;
SHOW KEYS FROM tablename;

ビューのインデックスの例

SHOW INDEX FROM IT_salary;
SHOW KEYS FROM IT_salary;

コンセプト総務

 トランザクションは、一連の動作がデータベース操作命令のセットと、すべてのコマンドを含む、すなわち、データベースコマンドのセットは、いずれかの実行されない実行されるまたは、取り消しまたはシステムに要求と共に全体として提出する機構です。
 ;トランザクションは、データベース・システム上で同時操作を行う場合には、制御ユニットは、最小のトランザクションで作業不可分の論理的な単位である
 ようなシステムを取引銀行、保険会社、証券として、同時に動作複数のユーザーに、使用シーンデータベースシステム等。
 データの一貫性を確保するために、トランザクションの整合性によって、

ACIDトランザクション機能

アトミック:
完全な操作で、トランザクションの各要素が不可分であるトランザクション(原子)
トランザクションのすべての要素の全体がコミットまたはロールバックされなければならないよう
トランザクション内の任意の要素に障害が発生した場合は、トランザクション全体が失敗した
一貫性を:
トランザクションが完了すると、データが一貫性のある状態でなければなりません:トランザクションの開始前に、データが一貫した状態にデータベースに保存され、継続的な取引では、データが矛盾した状態にあってもよく、トランザクションが正常に完了すると、データが再び戻って行かなければなりません一貫性のある状態の既知
のアイソレーションを:
データを変更するには、すべての同時トランザクションは、トランザクションが独立していなければならないことを示し、互いに分離され、彼はどのような方法で影響を与えたり、その他の事項に依存してはならない
データを変更するトランザクションが別のに使用することができますアクセスへのトランザクションの終了後に同じデータアクセスのトランザクションデータの開始前、または別のデータに同じデータを再使用して
永続:
トランザクション耐久手段にかかわらず、システムが故障であるかどうかの、トランザクションの結果は永続的であることを
、トランザクションがコミットされたら、 、トランザクションの効果は永久に予約されます データベース

そのサービスの運用

默认情况下的MySQL的事务是自动提交的,当SQL语句提交时事务便自动提交

制御するためのマニュアル取引方法:

事务处理命令控制
使用set设置事务出来方式

トランザクションを制御するためのコマンドを処理するトランザクション:

begin:开始一个事务
commit:提交一个事务
rollback:回滚一个事务

コントロールにsetコマンドを使用します。

set autocommit=0:禁止自动提交
set autocommit=1:开启自动提交

ストレージエンジンの概念

 MySQLでデータがファイルに保存されているさまざまな技術を使用して、それぞれの技術は、MySQLに技術、ロックレベルと最終的に異なる機能とこれらの異なる技術の機能を提供し、サポートする機能をインデックス、異なるストレージメカニズムを使用しています呼ばれるストレージエンジン
 、ストレージエンジンは、ファイルシステムに格納されたデータの格納または記憶形式のMySQLである
 。現在、2つの一般的に使用されるMySQLストレージエンジン
  MyISQM
  InnoDBは
 MySQLデータベースサーバにMySQLのストレージエンジンは、データベースの実際の実施のための成分責任を負いますデータI / O操作の
 特別なストレージエンジンの主な利点のアプリケーションのみ、所望の特定の特性、データベースシステムオーバーヘッドも小さく、より強力かつ高性能のデータベースを提供することにある
 MySQLのシステムは、エンジンが格納されていますファイル・システムに、データは、それぞれのストレージエンジンに応じて記憶する記憶フォーマットした後、送信前及びストレージエンジンにデータファイルに格納されています

MySQL--インデックスとトランザクションストレージエンジンMyLSAMとInnoDBの(理論セクション)

MyISQMはじめに

ISAMの機能:

ISAM执行读取操作的速度很快
而且不占用大量的内存和存储资源
他不支持事务处理
不能够容错

MyISAMテーブルの特徴:

1、不支持事务
2、表级锁定形式,数据在更新时锁定整个表
3、数据库在读写过程中相互阻塞
●会在数据写入的过程阻塞用户数据的读取
●也会在数据读取的过程中阻塞用户的数据写入
4、可通过key_buffer_size来设置缓存索引,提高访问性能,减少磁盘IO的压力
●但缓存只会缓存索引文件,不会缓存数据
5、采用MyISAM存储引擎数据单独写入或读取,速度过程较快且占用资源相对少
6、MyISAM存储引擎它不支持外键约束,只支持全文索引
7、每个MyISAM在磁盘.上存储成三个文件,每- -个文件的名字以表的名字开始,扩展名指出文件类型
8、MyISAM在磁盘.上存储的文件
●.frm文件存储表定义
●数据文件的扩展名为.MYD (MYData)
●索引文件的扩展名是.MYI (MYIndex)

適した生産シナリオの例のMyISAM

公司业务不需要事务的支持
一般单方面读取数据比较多的业务,或单方面写入数据比较多的业务
MyISAM存储引擎数据读写都比较频繁场景不适合
使用读写并发访问相对较低的业务
数据修改相对较少的业务
对数据业务一致性要求不是非常高的业务
服务器硬件资源相对比较差

InnoDBの機能が導入されました

支持事务:支持4个事务隔离级别
行级锁定,但是全表扫描仍然会是表级锁定
读写阻塞与事务隔离级别相关
具有非常高效的缓存特性:能缓存索引,也能缓存数据
表与主键以簇的方式存储
支持分区、表空间,类似oracle数据库
支持外键约束,5.5以前不支持全文索引,5.5版本以后支持全文索引
对硬件资源要求还是比较高的场合

InnoDBの適用生産シーン解析

业务需要事务的支持
行级锁定对高并发有很好的适应能力,但需确保查询是通过索引来完成
业务数据更新较为频繁的场景,如:论坛,微博等
业务数据一致性要求较高,例如:银行业务
硬件设备内存较大,利用Innodb较好的缓存能力来提高内存利用率,减少磁盘I0的压力

ベースの企業がストレージエンジンを選択します

私たちは、コア機能を提供し、シーンを出荷する必要があり、それぞれ異なるストレージエンジンを考慮する必要があります

フィールドとデータ型のサポート

所有引擎都支持通用的数据类型
但不是所有的引擎都支持其他的字段类型,如二进制对象

ロックタイプ:別々のストレージエンジンは、ロックのさまざまなレベルをサポート

表锁定
行锁定

インデックスのサポート

建立索引在搜索和恢复数据库中的数据的时候能够显著提高性能
不同的存储引擎提供不同的制作索引的技术
有些存储引擎根本不支持索引

サポートトランザクション処理

事务处理功能通过提供在向表中更新和插入信息期间的可靠性
课根据企业业务是否支持事务选项选择存储引擎

構成ストレージエンジン

企業内で適切なストレージエンジンを選択した後、あなたが変更することができます

修正します

查看数据库可配置的存储引擎
查看表正在使用的存储引擎
配置存储引擎为所选择的类型

使用ショーのエンジンは、システムのストレージエンジンでサポートされているビュー

方法1:
show table status from  库名  where  name='表名;
方法2:
show create table    表名;

ストレージエンジンを変更します。

方法1: alter table修改;
alter table table_ name engine=引擎;
方法2:修改my.cnf,指定默认存储引擎并重启服务
default-storage-engine=InnDB
方法3: create table创建表时指定存储引擎
create table   表名   (字段) engine=   引擎
方法4: Mysql_ convert_ table_ format 转化存储引擎
Mysql_ convert_ table_ format -user=root -password=密码
- sock=/tmp/mysql.sock - engine =引擎 库名 表名

読んでくれてありがとう!

おすすめ

転載: blog.51cto.com/14080162/2452678