MySQL(トランザクションとインデックス)
4940 ワード
文書ディレクトリトランザクションおよびインデックス 1.トランザクション 1.1取引の紹介 1.2トランザクションの4つの特性 1.3トランザクションの使用 1.4トランザクションの開始:自分のsql文が正しいかどうかを確認する .1.5コミットトランザクション:トランザクションがコミットされると、ロールバックトランザクションは無効になります. 1.6ロールバックトランザクション:トランザクションがオープンする前のステータス を返します. 2.インデックス 2.1インデックスの説明 2.2インデックスの使用 2.3ケース-インデックスクエリのパフォーマンスの検証 2.4連合インデックス 2.5連合インデックスの最左原則 2.6小結 トランザクションとインデックス
1.取引
1.1事務の紹介
トランザクションは、ユーザー定義のSQL文を実行する一連のアクションです.これらのアクションは、完全に実行されるか、完全に実行されないか、分割できない作業実行ユニットです.
トランザクションの使用シーン:
日常生活の中で、时には私达は银行の振り込みを行う必要があります.この银行の振り込み操作の背後には複数のSQL文を実行する必要があります.もしこれらのSQLが半分まで実行して突然停电したら、この机能は半分しか完成しません.このような状况は発生してはいけません.この问题を解决するには、事务を通じて完成する必要があります.
1.2事務の四大特性
原子性(Atomicity)整合性(Consistency)隔離性(Isolation)持続性(Durability)
1.3トランザクションの使用
トランザクションを使用する前に、テーブルのストレージエンジンがInnoDBタイプであることを確認します.このタイプのみがトランザクションを使用できます.MySQLデータベースのテーブルのストレージエンジンのデフォルトはInnoDBタイプです.
MySQLデータベースでサポートされているテーブルのストレージエンジンを表示します.
-MySQLデータベースでサポートされているテーブルのストレージエンジンshow enginesを表示します.
説明:でよく使われるテーブルのストレージエンジンはInnoDBとMyISAM です. InnoDBは、トランザクションをサポートする です. MyISAMはトランザクションをサポートしていません.アクセス速度が速いという利点があります.トランザクションに要求がないか、select、insertを主とするストレージエンジンを使用してテーブル を作成できます.創表文からgoods表の記憶エンジンはInnoDBであることが分かる. テーブルのストレージエンジン使用を変更する:alter tableテーブル名engine=エンジンタイプ;例えば、alter table students engine=‘MyISAM’;
1.4トランザクションのオープン:自分のsql文が正しいかどうかを確認する
begin;
1.5トランザクションのコミット:トランザクションがコミットされると、トランザクションはロールバックされません.
commit;
1.6トランザクションのロールバック:トランザクションがオープンする前のステータスを返します.
rollback;
トランザクションのSQL文: pymysqlのconn.commit()操作は、トランザクションをコミットする です. pymysqlのconn.rollback()操作は、トランザクション をロールバックします.
2.索引
2.1索引の紹介
インデックスはMySQLでも「キー」と呼ばれ、データテーブルに記録されているすべての位置情報を保存する特殊なファイルです.より一般的には、データベースインデックスは本の前のディレクトリのようなもので、データベースのクエリー速度を速めることができます.
≪適用シーン|Apply Scene|emdw≫:データベース内のデータ量が大きい場合、データの検索が遅くなり、インデックスを使用してデータベースのクエリー効率を向上させることができます.
2.2インデックスの使用
説明:プライマリ・キー列は、インデックス を自動的に作成します.
インデックスの作成:インデックス名は指定されず、デフォルトではフィールド名 が使用されます.
索引の削除:
2.3ケース-インデックスクエリのパフォーマンスの検証
テストテーブルtestindexを作成するには、次の手順に従います.
テーブルに10万個のデータを挿入します.
インデックス・パフォーマンスの検証:
2.4統合インデックス
結合インデックスは複合インデックスとも呼ばれ、1つのインデックスがテーブル内の2つ以上のフィールドを上書きし、一般的に複数のフィールドが一緒にクエリーされる場合に使用されます.
結合インデックスのメリット:は、インデックスを作成するたびにインデックスファイルが作成されるため、ディスク領域のオーバーヘッドを削減します.
2.5連合インデックスの最も左の原則
連合インデックスを使用する場合、index(name,age)は作成した連合インデックスが使用されないため、name、name、ageの組合せクエリーをサポートし、単独のageクエリーをサポートしないという最も左の原則に従います.
最も左の原則の例:
説明:連合インデックスのクエリーデータを使用する場合は、連合インデックスの一番左側のフィールドがクエリー条件に表示されることを保証しなければなりません.そうしないと、連合インデックスは 失効します.
2.6まとめインデックスは、データベースのクエリー速度を速める手段である です.インデックス作成使用:alter tableテーブル名add indexインデックス名[オプション](フィールド名、xxx); 削除インデックス使用:alter tableテーブル名drop indexインデックス名;
1.取引
1.1事務の紹介
トランザクションは、ユーザー定義のSQL文を実行する一連のアクションです.これらのアクションは、完全に実行されるか、完全に実行されないか、分割できない作業実行ユニットです.
トランザクションの使用シーン:
日常生活の中で、时には私达は银行の振り込みを行う必要があります.この银行の振り込み操作の背後には複数のSQL文を実行する必要があります.もしこれらのSQLが半分まで実行して突然停电したら、この机能は半分しか完成しません.このような状况は発生してはいけません.この问题を解决するには、事务を通じて完成する必要があります.
1.2事務の四大特性
原子性(Atomicity)整合性(Consistency)隔離性(Isolation)持続性(Durability)
1.3トランザクションの使用
トランザクションを使用する前に、テーブルのストレージエンジンがInnoDBタイプであることを確認します.このタイプのみがトランザクションを使用できます.MySQLデータベースのテーブルのストレージエンジンのデフォルトはInnoDBタイプです.
MySQLデータベースでサポートされているテーブルのストレージエンジンを表示します.
-MySQLデータベースでサポートされているテーブルのストレージエンジンshow enginesを表示します.
説明:
1.4トランザクションのオープン:自分のsql文が正しいかどうかを確認する
begin;
1.5トランザクションのコミット:トランザクションがコミットされると、トランザクションはロールバックされません.
commit;
1.6トランザクションのロールバック:トランザクションがオープンする前のステータスを返します.
rollback;
トランザクションのSQL文:
begin;
insert into students(name) values(' ');
-- , , : ,
select * from students;
-- , MySQL , students , , ,
-- ,
-- ,
commit;
2.索引
2.1索引の紹介
インデックスはMySQLでも「キー」と呼ばれ、データテーブルに記録されているすべての位置情報を保存する特殊なファイルです.より一般的には、データベースインデックスは本の前のディレクトリのようなもので、データベースのクエリー速度を速めることができます.
≪適用シーン|Apply Scene|emdw≫:データベース内のデータ量が大きい場合、データの検索が遅くなり、インデックスを使用してデータベースのクエリー効率を向上させることができます.
2.2インデックスの使用
show index from ;
説明:
インデックスの作成:
--
-- alter table add index [ ]( , ..)
-- name
alter table classes add index my_name (name);
索引の削除:
--
-- alter table drop index
-- , sql
show create table classes;
alter table classes drop index my_name;
2.3ケース-インデックスクエリのパフォーマンスの検証
テストテーブルtestindexを作成するには、次の手順に従います.
create table test_index(title varchar(10));
テーブルに10万個のデータを挿入します.
from pymysql import connect
def main():
# Connection
conn = connect(host='localhost',port=3306,database='python',user='root',password='mysql',charset='utf8')
# Cursor
cursor = conn.cursor()
# 10
for i in range(100000):
cursor.execute("insert into test_index values('ha-%d')" % i)
#
conn.commit()
if __name__ == "__main__":
main()
インデックス・パフォーマンスの検証:
-- :
set profiling=1;
-- 1 ha-99999
select * from test_index where title='ha-99999';
-- :
show profiles;
-- title :
alter table test_index add index (title);
--
select * from test_index where title='ha-99999';
--
show profiles;
2.4統合インデックス
結合インデックスは複合インデックスとも呼ばれ、1つのインデックスがテーブル内の2つ以上のフィールドを上書きし、一般的に複数のフィールドが一緒にクエリーされる場合に使用されます.
-- teacher
create table teacher
(
id int not null primary key auto_increment,
name varchar(10),
age int
);
--
alter table teacher add index (name,age);
結合インデックスのメリット:
2.5連合インデックスの最も左の原則
連合インデックスを使用する場合、index(name,age)は作成した連合インデックスが使用されないため、name、name、ageの組合せクエリーをサポートし、単独のageクエリーをサポートしないという最も左の原則に従います.
最も左の原則の例:
--
select * from stu where name=' ' -- name
select * from stu where name=' ' and age=10 -- , name age
--
select * from stu where age=10 -- , name name age
説明:
2.6まとめ