MySQLインデックス、トランザクション、ストレージエンジン
1つ、インデックス
1.1コンセプト
- ソートされたリスト、インデックス値、およびこの値に対応する位置、物理アドレス。
- クエリに便利で、物理アドレスを通じて必要なデータを見つけることができます。
- テーブルの1つまたは複数の列の値を並べ替える方法。
- 追加のディスク容量を使用します。
1.2利点
- 高速位置決めとクエリ速度の高速化。
- データテーブルが大きい場合は、複数の表現をクエリして効率を向上させます。
- データベースのIOコストを削減し、データベースの並べ替えコストを削減します。
- 一意のインデックスを作成して、データテーブル内のデータの一意性を確保します。
- データテーブルとテーブルの間の接続を高速化します。
- グループ化と並べ替えを使用すると、並べ替えの時間を大幅に削減できます。
1.3分類
- 通常インデックス
- 最も基本的なインデックスタイプ。一意性などの制限はありません。
- 通常のインデックスを作成する方法
- 一意のインデックス
- 基本的に「通常のインデックス」と同じ
- 通常のインデックスの違い:インデックス列のすべての値は1回しか出現できず、一意である必要があります
- 主キーインデックス
- 「主キー」(小文字)として指定される特別な一意のインデックスです
- テーブルは1つの主キーのみを持つことができ、null値は許可されません
- 複合インデックス(単一列と複数列)
- 単一の列または複数の列に作成できます
- 左から右に実行される左端の原則
- 全文索引
- mysqlはバージョン3.23.23からの全文索引付けおよび全文検索をサポートします
- 索引タイプは全文です
- CHAR、VARCHAR、またはTEXTタイプの列で作成できます
アイコン:
第二に、インデックスを作成するための主要な基礎
索引付けに適した条件
- テーブルの主キー、外部キー
- 300行を超えるテーブル
- 他のテーブルに接続されることが多いテーブルは、接続フィールドにインデックスを作成します
- where句によく現れるフィールド、特に大きなテーブルのフィールド
- 選択性の高い分野について
- 小さなフィールドも作成できます
インデックス作成に適さない条件
- 一意性の低いフィールド
- 頻繁に更新されるフィールド
- 大きなテキストフィールドまたは非常に長いフィールド
3、表示、削除、インデックスメソッド
- インデックスを表示
テーブル名からインデックスを表示します。
表名のキーを表示します。
- インデックスを削除
テーブル名にインデックスindex名をドロップします。
変更テーブルテーブル名ドロップインデックス名;
四、事
4.1コンセプト
- 保護メカニズム。操作シーケンスには一連のデータベース操作コマンドが含まれ、すべてのコマンドは全体としてシステムに送信またはキャンセルされます。つまり、この一連のデータベースコマンドは実行されるか実行されません
- 不可分な作業の論理単位。データベースシステムで並行操作を実行する場合、トランザクションは制御の最小単位です。
- これは、複数のユーザーが同時に操作するデータベースシステムのシナリオや、機密データを使用する重要な操作に適しています。例:銀行、証券取引システム...
- トランザクションの整合性により、データの一貫性を確保します!!
4.2トランザクションのACID特性
- 原子性
トランザクションは完全な操作であり、
トランザクションの要素は分割できません。トランザクションのすべての要素は、全体としてコミットまたはロールバックする必要があります。
トランザクションのいずれかの要素が失敗すると、トランザクション全体が失敗します
- 一貫性
- トランザクションが完了したとき、データは一貫した状態でなければなりません
- トランザクションが始まる前、データベースに保存されているデータは一貫した状態にあります
- 進行中のトランザクションでは、データが不整合な状態にある可能性があります
- トランザクションが正常に完了したら、データを既知の一貫した状態に再度戻す必要があります
- 隔離
- データを変更するすべての同時トランザクションは互いに分離されているため、トランザクションは
独立している必要があり、他のトランザクションに依存したり影響を与えたりしてはならない- データトランザクションの変更では、この訪問の開始前に別のトランザクションで同じデータを使用し、
一部のデータの終了後にこれらの番号にアクセスするか、別のトランザクション
データで同じデータを使用できます。
- 持久性
- システムに障害が発生したかどうかを示し、トランザクション処理の結果は永続的です
- トランザクションがコミットされると、トランザクションの効果はデータベースに永続的に保持されます
4.3トランザクション制御ステートメント
- Mysqlトランザクションはデフォルトで自動的に送信され、トランザクションはsqlステートメントが送信されると自動的に送信されます。
- 制御ステートメント
- トランザクションの開始または開始
- コミット
- ロールバック
- SAVEPOINTトランザクション名
- RELEASE SAVEPOINTトランザクション名
- ROLLBACK TOトランザクション名
- トランザクションを設定
- 制御ステートメントの説明:(上から下に順に説明:)
トランザクションの開始を表示します。
トランザクションをコミットし、データベースに加えられたすべての変更を永続的にします。
ロールバックは、ユーザーのトランザクションを終了し、進行中のコミットされていないすべての変更を元に戻します。
トランザクションにセーブポイントを作成できます、
トランザクション内のトランザクションを削除するために複数のセーブポイントが存在する可能性があります。セーブポイントが指定されていない場合、ステートメントの実行時に例外が表示されます。
トランザクションは、保存されたトランザクションポイントにロールされます。これは
、トランザクションの分離レベルを設定するために使用されます。lnnonDBストレージエンジンは、コミットされていない読み取り、コミットされた読み取りなどのトランザクション分離レベルを提供します...
- 最初にライブラリ、テーブルを作成し、データを追加します。
创建数据库:
mysql> create database uou;
Query OK, 1 row affected (0.00 sec)
创建数据表:
mysql> create table lol(
-> id int(4) not null primary key auto_increment,
-> name varchar(10) not null,
-> address varchar(50) default 'taihe',
-> age int(3) not null);
在表中添加数据:
mysql> insert into lol
-> (name,address,age) values
-> ('小明','北京',23),
-> ('小刚','南京',20);
查看数据记录
mysql> select * from lol;
+----+--------+---------+-----+
| id | name | address | age |
+----+--------+---------+-----+
| 1 | 小明 | 北京 | 23 |
| 2 | 小刚 | 南京 | 20 |
+----+--------+---------+-----+
- トランザクション操作
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into lol
-> (name,address,age)
-> values
-> ('小红','深圳',22);
mysql> select * from lol;
+----+--------+---------+-----+
| id | name | address | age |
+----+--------+---------+-----+
| 1 | 小明 | 北京 | 23 |
| 2 | 小刚 | 南京 | 20 |
| 3 | 小红 | 深圳 | 22 |
+----+--------+---------+-----+
3 rows in set (0.00 sec)
mysql> savepoint a; #保存到一个事务点名a;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into lol #写入数据验证
-> (name,address,age)
-> values
-> ('小兰','上海',25);
Query OK, 1 row affected (0.00 sec)
mysql> select * from lol;
+----+--------+---------+-----+
| id | name | address | age |
+----+--------+---------+-----+
| 1 | 小明 | 北京 | 23 |
| 2 | 小刚 | 南京 | 20 |
| 3 | 小红 | 深圳 | 22 |
| 4 | 小兰 | 上海 | 25 |
+----+--------+---------+-----+
4 rows in set (0.00 sec)
mysql> rollback to a; #回滚到保存点a;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from lol;
+----+--------+---------+-----+
| id | name | address | age |
+----+--------+---------+-----+
| 1 | 小明 | 北京 | 23 |
| 2 | 小刚 | 南京 | 20 |
| 3 | 小红 | 深圳 | 22 |
+----+--------+---------+-----+
3 rows in set (0.00 sec)
mysql> insert into lol #重新写入数据
-> (name,address,age)
-> values
-> ('小兰','上海',25);
Query OK, 1 row affected (0.00 sec)
mysql> commit; #提交数据之后,保证一致性,才会显示!!
退出当前管理用户账号,从新登录进来,会看到数据已经写进去!
5、ストレージエンジン
5.1はじめに
-
MySQLのデータは、ファイルに保存されているさまざまなテクノロジーを使用しており、各
手法は異なるストレージメカニズム、インデックス付け手法、ロックレベルを使用して
おり、最終的にはこれらのさまざまなテクノロジーのさまざまな機能と機能、および
一連の機能を提供しますMySQLで呼び出されるストレージエンジン -
ストレージエンジンは、MySQLがデータをファイルシステムに
保存するストレージメソッドまたはストレージフォーマットです。 -
MySQLの一般的に使用されるストレージエンジン
●MyISAM
●InnoDB -
実際のデータI / O操作の実行を担当するMySQLデータベースのコンポーネント
-
MySQLシステムでは、ストレージエンジンはファイルシステム上にあります。データが
データファイルに保存される前に、データはストレージエンジンに転送され、各
ストレージエンジンのストレージフォーマットに従って保存されます。
5.2 MyISAM
- MyISAMはトランザクションまたは外部キーをサポートしていません
- 高速アクセス
- トランザクションの整合性は不要
- MyISAMは3つのファイルとしてディスクに保存されます
●.frmファイルストレージテーブルの定義
●データファイルの拡張子は.MYD(MYData)です
●インデックスファイルの拡張子は.MYI(MYIndex)です
■テーブルレベルロックモード、データ更新時にテーブル全体がロックされます
■データベースは
読み書き中にブロックされます
● データ書き込み中のユーザーデータの読み取りをブロックします●データ読み取り中のユーザーデータもブロックします書き込み
■データの書き込みまたは読み取りが個別に行われ、処理速度が速く、リソースが比較的小さい
■MyIAMでサポートされているストレージ形式
●静的テーブル
●動的テーブル
●圧縮テーブル
5.3 MyISAMに適用可能な本番シナリオ
- 会社の事業は事務のサポートを必要としません
- 一方的により多くのデータを読み書きするサービス
- MyISAMストレージエンジンデータの読み取りと書き込みは頻繁に行われ、シナリオには適さない
- 比較的低いビジネスへの読み取りと書き込みの同時アクセスを使用する
- データ変更が比較的少ない企業
- 高度なコンプライアンスを必要としないデータビジネス-ビジネス
- サーバーのハードウェアリソースが比較的少ない
5.4 InnoDBの概要
- 4つのトランザクション分離レベルをサポート
- 行レベルのロック、ただしフルテーブルスキャンは引き続きテーブルレベルのロック
- MyISAMストレージエンジンデータの読み取りと書き込みは頻繁に行われ、シナリオには適さない
- 比較的低いビジネスへの読み取りと書き込みの同時アクセスを使用する
- データ変更が比較的少ない企業
- 高度なコンプライアンスを必要としないデータビジネス-ビジネス
- サーバーのハードウェアリソースが比較的少ない
5.5適用可能な生産シナリオの分析
- ビジネスニーズサポート
- 行レベルのロックは高い同時実行性に優れた適応性がありますが、クエリが
インデックスを介して完了していることを確認する必要があります
フォーラム、Weiboなど、ビジネスデータが頻繁に更新されるシナリオ- 次のようなビジネスデータの整合性要件は高いです
。 - ハードウェアデバイスには大容量メモリが搭載されており、Innodbの優れたキャッシング機能を
使用してメモリ使用率を向上させ、ディスクIOの負荷を軽減します
5.6ストレージエンジンのエンタープライズ選択の基礎
- 各ストレージエンジンが提供するコア機能とアプリケーションシナリオを考慮する必要がある
- サポートされているフィールドとデータ型
すべてのエンジンが共通のデータ型を
サポートしていますが、すべてのエンジンがバイナリオブジェクトなどの他のフィールド型をサポートしているわけではありません - ロックタイプ:異なるストレージエンジンが同じレベルのロック
テーブルロック
行ロックをサポート
検索
エンジンを確立するためのインデックス作成サポート| データベース内のデータを検索および復元するときのパフォーマンスを大幅に向上できます。異なるストレージエンジンエンジンは、異なるインデックス作成テクノロジーを提供します。
一部のストレージエンジンは、インデックスをまったくサポートしていません。- トランザクション処理のサポート
テーブルへの情報の更新および挿入時の信頼性が向上します。
ビジネスがトランザクションをサポートする必要があるかどうかに応じて、ストレージエンジンを選択できます。
6、ストレージエンジンメソッドを変更する
方法1:
alter table 表名 engine=引擎;
方法2:
vi /etc/my.cnf
在[mysqld]配置段内添加,指定默认引擎并重启服务;
default-storage-engine=innoDB
重启mysqld
方法3:
create table 表名 (字段....) engine = 引擎;
方法4:
Mysql_convert_table_format--user=root--password=密码 --sock=/tmp/mysql.sock --engine = 引擎 库名 表名
yum -y install perl-DBI perl-DBD-MySQL
/usr/local/mysql/bin/mysql_convert_table_format --user=root --password='123456' --sock=/tmp/mysql.sock auth