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文:
    begin;
    insert into students(name) values('  ');
    --      ,        ,   :                 ,                 
    select * from students;
    --         ,    MySQL   ,  students ,           ,           ,         
    --                   ,             
    
    --         ,             
    commit;
    
  • pymysqlのconn.commit()操作は、トランザクションをコミットする
  • です.
  • pymysqlのconn.rollback()操作は、トランザクション
  • をロールバックします.
    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まとめ
  • インデックスは、データベースのクエリー速度を速める手段である
  • です.
  • インデックス作成使用:alter tableテーブル名add indexインデックス名[オプション](フィールド名、xxx);
  • 削除インデックス使用:alter tableテーブル名drop indexインデックス名;