インデックスとは?インデックスの作成方法インデックスの使用原則?

3173 ワード

  • インデックスの紹介インデックスはMySQLでも「キー」と呼ばれています.これは特殊なファイルで、データテーブルに記録されているすべての位置情報を保存しています.より一般的には、データベースインデックスは本の前のディレクトリのようなもので、データベースのクエリー速度を速めることができます.データベース内のデータ量が大きいと、データの検索が遅くなり、インデックスを使用してデータベースのクエリー効率を向上させることができます.
  • インデックスの使用表の既存のインデックス:
  • 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;
    
    
  • ケース-インデックスクエリのパフォーマンスの検証テストテーブル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',passwor
    d='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;
    

    4.結合インデックス結合インデックスは複合インデックスとも呼ばれ、1つのインデックスがテーブル内の2つ以上のフィールドを上書きし、一般的に複数のフィールドが一緒にクエリーされる場合に使用されます.
    --   teacher 
    create table teacher
    (
    id int not null primary key auto_increment,
      
    84
    name varchar(10),
    age int
    );
    --       
    alter table teacher add index (name,age);
    

    統合インデックスの利点:インデックスを作成するたびにインデックスファイルが作成されるため、ディスク領域のオーバーヘッドが削減されます.
  • 連合インデックスの最左原則連合インデックスを使用する場合、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      
    
    

    説明:連合インデックスのクエリーデータを使用する場合は、連合インデックスの一番左側のフィールドがクエリー条件に表示されることを保証しなければなりません.そうしないと、連合インデックスは失効します.
  • MySQLにおけるインデックスの利点と欠点と使用原則の利点:
  • データのクエリー速度を速める欠点:
  • インデックスの作成には時間とディスク容量がかかり、データ量の増加に伴う時間も
  • 増加します.
    使用原則:
  • 長所と短所を比較すると、インデックスが多ければ多いほど良いのではなく、自分で合理的に使用する必要があります.
  • 頻繁に更新されるテーブルについては、インデックスの作成を回避し、クエリーに頻繁に使用されるフィールドに対してインデックスを作成する必要があります.
  • データ量の小さいテーブルはインデックスを使用しないほうがいいです.データが少ないため、すべてのデータをクエリーするのにかかる時間がインデックスを遍歴する時間よりも短く、インデックスが最適化されない可能性があります.
  • は、学生テーブルの「性別」フィールドに男性と女性の2つの異なる値しかないなど、1つのフィールドで同じ値が比較的多いので、インデックスを作成しないでください.逆に、1つのフィールドに異なる値が多いが、インデックスが作成されます.

  • 小結インデックスはデータベースのクエリー速度を速める手段でインデックスを作成するために使用されます:alter tableテーブル名add indexインデックス名[オプション](フィールド名、xxx);削除インデックス使用:alter tableテーブル名drop indexインデックス名;