主流的关系型数据库有Oracle、MySQL等,以MySQL为例,创建、查看、删除索引。
创建索引的三种方式
创建表的时候创建索引
CREATE TABLE student(
stu_id int(10),
name varchar(20),
course varchar(50),
score float,
DESCription varchar(100),
INDEX(stu_id), #创建普通索引
UNIQUE INDEX unique_id(stu_id ASC), #创建唯一性索引
FULLTEXT INDEX fulltext_name(name), #创建全文索引
INDEX single_course(course(10)), #创建单列索引
INDEX multi(stu_id, name(20)) #创建多列索引
);
使用CREATE INDEX创建
CREATE INDEX indexName ON tableName (columnName(length));
使用ALTER语句创建
ALTER TABLE tableName ADD INDEX indexName(columnName);
查看索引
SHOW INDEX FROM tableName;
删除索引
ALTER TABLE t_user_action_log DROP INDEX index_ip_addr;
所有MySQL列类型都可以被索引,索引有两种存储类型:B+树和Hash。其中B+树为INNODB和MYISAM存储引擎的默认索引存储类型。
- B+树是一种二叉查找树(根节点的值大于其左子树中任意一个节点的值,小于其右节点中任意一节点的值,这一规则适用于二叉查找树中的每一个节点。),通过根节点进行二叉查找可以快速查询。
- 在每个叶子节点保存其下一个叶子节点的指针,这样当指定范围范围查询时,先从根节点根据范围的左值找到其叶子节点,之后通过向后遍历叶子节点即可找到对应范围右值,这样可以加速范围查询、排序、分组等数据库查询动作。
- MySQL等数据库引擎在实际实现B+树索引的时候,针对磁盘读写做了优化。如果没有索引,需要通过全表扫描查找数据,导致产生大量磁盘IO。