MySQL先進(VII):インデックス作成SQL文は、インデックスのクエリのパフォーマンス上の利点ことを確認し、MySQLのインデックスの欠点との原則を使用します

指数

学習目標

  • インデックスを作成するためにSQL文を書くことができます

1.はじめにインデックス

また、すべてのレコードの位置情報データテーブルを保持している特殊なファイルである「キー」として知られているMySQLのインデックスでは、データベースのインデックスは、カタログの前で本のように、より人気があり、あなたは、データベースをスピードアップすることができますクエリの速度。

シナリオ:

データベース内のデータが大量に、データが非常に遅くなります見つけるためにするとき、私たちは、インデックスを使用してデータベースクエリの効率を向上させることができます。

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;

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;

4.共同インデックス

関節指数複合インデックスと呼ばれる、すなわち、インデックステーブルは、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);

共同インデックスの利点:

  • それぞれがインデックスを作成するので、実際には、インデックスファイルを作成することです、ディスクスペースのコストを削減し、それはディスクスペースのコストが増加します。

共同インデックスの5左端の原則

組み合わせインデックスで使用されるとき、私たちはインデックス(名前、年齢が)名、名前と年齢複合クエリーをサポートすることが最も左の原則の一つに準拠する必要が継手は、インデックスを作成するために使用されていないため、クエリは、別の年齢をサポートしていません。

例は、原則を一番左:

-- 下面的查询使用到了联合索引
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 这两种组合

説明:

  • クエリに表示される一番左のフィールド条件の共同インデックス、または関節のインデックスが失敗することを保証しなければならない組み合わせのインデックスに使用されるクエリデータで

6.原則とインデックスの長所と短所の使用のMySQL

  • 利点:
    1. スピードアップは、データを照会します
  • 短所:
    1. これは、インデックスを作成し、ディスクスペースを取るために時間がかかり、データ量の増加と、それにかかる時間が長くなります
  • 使用の原則:
    1. 長所と短所、ないより良い指標を比較することではなく、独自の合理的な使用を必要とします。
    2. 定期的に頻繁に作成する必要がありますインデックスを照会するために使用されるフィールド上であまりにも多くのインデックスを作成しないように、それらのリストを更新し、
    3. 少ないデータによるもので、すべてのデータは、それがインデックスをトラバースするのにかかる時間よりも、短い時間に照会することができる、インデックスが最適なパフォーマンスを得られない可能性があるため、データテーブルの少量は、インデックスを使用しないことをお勧めです。
    4. 同じ値の分野ではより多くのないように、「性別」、学生のテーブルのフィールド上の2つの異なる値の唯一の男性と女性としてのインデックスへ。その代わり、別のフィールドが、より価値の指標インチ

7.まとめ

  • インデックスは、クエリのデータベースをスピードアップするための手段であります
  • 使用して索引を作成する:ALTERテーブルの追加、インデックステーブルのインデックス名[オプション](フィールド、XXX)を、
  • 使用して索引を削除:ALTER TABLEテーブル名ドロップインデックスインデックス名を、
公開された729元の記事 ウォンの賞賛964 ビュー120 000 +

おすすめ

転載: blog.csdn.net/qq_35456045/article/details/104828861