データベースインデックスの深い理解
インデックスとは何ですか
1. 索引是指针,指向表里的数据。
2. 索引通常与相应的表示分开存储的,其主要目的是提高数据检索的性能。
3. 索引的创建于删除不会影响到数据本身,但会影响到数据检索的速度。
4. 索引也会占用表空间,而且可能会比表本身大
(また、クラスタリング指標として知られているクラスタ化インデックス、クラスタ化インデックス)クラスタ化インデックス
聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。
一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个。
例えば:
- idフィールドは、(物理ストレージID増分に応じて)自己定義データベースによって定義されます
- 辞書店は、アルファベット順によると、辞書自体の体はあなたがコンテンツを探しているものを見つけるために別のディレクトリを見に行く必要はありません、ディレクトリです。
非クラスタ化インデックス(また、非クラスタ化インデックスとして知られている非クラスタ化インデックス、非クラスタ化インデックス)
该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。
数据行不按非聚集索引键的顺序排序和存储。
クラスタ化インデックスと非クラスタ化インデックスを使用する方法
アクション説明 | クラスタ化インデックスを使用します | 非クラスタ化インデックスを使用して |
---|---|---|
頻繁にパケット順序である列 | すべきです | すべきです |
一定の範囲内のデータを返します。 | すべきです | すべきではありません |
あるいは、いくつかの異なる値 | すべきではありません | すべきではありません |
異なる値の数が少ないです | すべきです | すべきではありません |
異なる値の多数 | すべきではありません | すべきです |
頻繁に更新された列 | すべきではありません | すべきです |
外部キー列 | すべきです | すべきです |
主キー列 | すべきです | すべきです |
頻繁に変更インデックス列 | すべきではありません | すべきです |
どのようにインデックスが働きます
インデックスの分類
シングルフィールドインデックス
基于一个字段创建的索引
CREATE INDEX INDEX_NAME
ON TABLE_NAME(COLUMN_NAME)
インデックスのみ
唯一索引不允许表里有重复值,除此之外与普通索引相同。
CREATE UNIQUE INDEX INDEX_NAME
ON TABLE_NAME(COLUMN_NAME)
注意:フィールドに一意索引を作成することはできませんNULLの価値を許可します
コンポジットインデックス
基于表里的两个或多个字段建立的索引。
在创建组合索引时,需要考虑性能的问题,因为字段在索引里的顺序对数据检索的速度有很大影响。
CREATE INDEX INDEX_NAME
ON TABLE_NAME(COLUMN1,COLUMN2)
暗黙のインデックス
隐含索引是数据库服务程序在创建对象时,自动创建的。
数据会为主键约束和唯一性约束自动创建索引。(主键和唯一性约束在插入数据时都需要检查唯一性,建立索引可以使唯一性检查效率更高)