mysql 索引

在 MySQL 中创建索引可以大大提高查询效率,加快数据检索速度,他的索引包含 普通索引和唯一索引,以及主键索引,下面是 MySQL 创建索引的方法:

1、普通索引(非唯一索引)
普通索引,即不唯一的索引,允许有重复的值,可以加速查询,但不保证数据的唯一性,普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE)或排序条件(ORDERBY)中的数据列创建索引创建普通索引的语法如下:

CREATE INDEX index_name ON table_name(column_name);

其中,index_name 表示索引的名称,table_name 表示要添加索引的表名,column_name 表示要添加索引的列名。

例如,创建 students 表中 name 列的索引:

CREATE INDEX idx_name ON students(name);

2、唯一索引
普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。
这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。比如在一个分布式系统中,多个节点可以访问同一个数据表,同一时刻多个节点要插入相同的数据到数据表,这个时候唯一索引就可以保证只有一个表项可以插入成功。

唯一索引,保证索引列的值唯一性,可用于加速查询,同时也可以用来保证数据的唯一性。创建唯一索引的语法如下:

CREATE UNIQUE INDEX index_name ON table_name(column_name);

其中,index_name 表示索引的名称,table_name 表示要添加索引的表名,column_name 表示要添加索引的列名。

例如,创建 students 表中 id 列的唯一索引:

CREATE UNIQUE INDEX idx_id ON students(id);

3.主键索引
主键索引是唯一索引的特殊类型。
数据库表通常有一列或列组合,其值用来唯一标识表中的每一行。该列称为表的主键。
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。
创建主键索引的语法如下:

ALTER TABLE table_name ADD PRIMARY KEY(column_name);

其中,table_name 表示要添加索引的表名,column_name 表示要添加主键索引的列名。

例如,给 students 表的 id 列添加主键索引:

ALTER TABLE students ADD PRIMARY KEY(id);

从上面可以看到,CREATE INDEX 语句创建索引,主键索引用的 ALTER TABLE
在 MySQL 中,可以使用 CREATE INDEX 语句创建索引,也可以使用 ALTER TABLE 语句添加索引。
下面是两种方法的详细描述:

使用 CREATE INDEX 语句创建索引

可以使用 CREATE INDEX 语句创建索引。CREATE INDEX 语句有以下语法:

CREATE [UNIQUE] INDEX index_name
ON table_name (column_name [, column_name ...])

index_name:索引的名称。
table_name:要创建索引的表名。
column_name:要包含在索引中的列名。
index_type:索引的类型。可选的类型有 BTREE 和 HASH。
例如,以下语句在 example 数据库的 users 表上创建了一个名为 name_index 的索引,该索引包含 name 列的值:

CREATE INDEX name_index ON users (name);

使用 ALTER TABLE 语句添加索引

可以使用 ALTER TABLE 语句添加索引。ALTER TABLE 语句有以下语法:

ALTER TABLE table_name
ADD [UNIQUE] INDEX index_name (column_name [, column_name ...])

table_name:要添加索引的表名。
index_name:索引的名称。
column_name:要包含在索引中的列名。
index_type:索引的类型。可选的类型有 BTREE 和 HASH。
例如,以下语句在 example 数据库的 users 表上添加了一个名为 age_index 的索引,该索引包含 age 列的值:

ALTER TABLE users ADD INDEX age_index (age);

主键和唯一索引:
主键索引是一种特殊的唯一索引,用于保证表中数据记录的唯一性。主键索引要求主键列不为空且每行数据唯一,因此每个表只能有一个主键。
主键与唯一索引不同的是:
1.主键是一种特殊的唯一索引,一个表只能有一个主键,它的值不能为空(即不允许NULL),主键一般用于作为表中记录的唯一标识符。而唯一索引可以有多个,它的值也不能重复,但可以为空。
2.主键可以自增长(auto_increment),这样插入数据时就不需要指定主键的值,而唯一索引不可以自增长。
3.主键可以作为外键(Foreign Key),用于与其他表建立关联,而唯一索引不可以作为外键。
4.主键不一定只包含一个字段,主健也可是多个字段的组合,所以如果你在主键的其中一个字段建唯一索引还是必要的。
总之,主键是一种用来标识唯一性且不允许为空的索引,而唯一索引则是一种用来标识唯一性的索引。如果一个字段既需要唯一性又需要作为外键,那么应该将其设置为主键。如果只需要保证唯一性,那么可以使用唯一索引。
唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log n)。

你可能感兴趣的:(数据库,数据库,mysql)