9、创建索引(CREATE INDEX)

创建索引是指在某个表的一列或多列上建立一个索引,可以提高对表的访问速度。创建索引对 MySQL 数据库的高效运行来说是很重要的。
基本语法

MySQL 提供了三种创建索引的方法:

1) 使用 CREATE INDEX 语句

可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。

语法格式:

CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])

语法说明如下:

  • <索引名>:指定索引名。一个表可以创建多个索引,但每个索引在该表中的名称是唯一的。
  • <表名>:指定要创建索引的表名。
  • <列名>:指定要创建索引的列名。通常可以考虑将查询语句中在 JOIN 子句和 WHERE 子句里经常出现的列作为索引列。
  • <长度>:可选项。指定使用列前的 length个字符来创建索引。使用列的一部分创建索引有利于减小索引文件的大小,节省索引列所占的空间。在某些情况下,只能对列的前缀进行索引。索引列的长度有一个最大上限255 个字节(MyISAM 和 InnoDB 表的最大上限为 1000个字节),如果索引列的长度超过了这个上限,就只能用列的前缀进行索引。另外,BLOB 或 TEXT 类型的列也必须使用前缀索引。
  • ASC|DESC:可选项。ASC指定索引按照升序来排列,DESC指定索引按照降序来排列,默认为ASC。

2) 使用 CREATE TABLE 语句

索引也可以在创建表(CREATE TABLE)的同时创建。在 CREATE TABLE 语句中添加以下语句。语法格式:

CONSTRAINT PRIMARY KEY [索引类型] (<列名>,)

在 CREATE TABLE 语句中添加此语句,表示在创建新表的同时创建该表的主键

语法格式:

KEY | INDEX [<索引名>] [<索引类型>] (<列名>,)

在 CREATE TABLE 语句中添加此语句,表示在创建新表的同时创建该表的索引。

语法格式:

UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,)

在 CREATE TABLE 语句中添加此语句,表示在创建新表的同时创建该表的唯一性索引

语法格式:

FOREIGN KEY <索引名> <列名>

在 CREATE TABLE 语句中添加此语句,表示在创建新表的同时创建该表的外键。

在使用 CREATE TABLE 语句定义列选项的时候,可以通过直接在某个列定义后面添加 PRIMARY KEY 的方式创建主键。而当主键是由多个列组成的多列索引时,则不能使用这种方法,只能用在语句的最后加上一个 PRIMARY KRY(<列名>,…) 子句的方式来实现。

3) 使用 ALTER TABLE 语句

CREATE INDEX 语句可以在一个已有的表上创建索引,ALTER TABLE 语句也可以在一个已有的表上创建索引。在使用 ALTER TABLE 语句修改表的同时,可以向已有的表添加索引。具体的做法是在 ALTER TABLE 语句中添加以下语法成分的某一项或几项。

语法格式:

ADD INDEX [<索引名>] [<索引类型>] (<列名>,)

在 ALTER TABLE 语句中添加此语法成分,表示在修改表的同时为该表添加索引。

语法格式:

ADD PRIMARY KEY [<索引类型>] (<列名>,)

在 ALTER TABLE 语句中添加此语法成分,表示在修改表的同时为该表添加主键。

语法格式:

ADD UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,)

在 ALTER TABLE 语句中添加此语法成分,表示在修改表的同时为该表添加唯一性索引。

语法格式:

ADD FOREIGN KEY [<索引名>] (<列名>,)

在 ALTER TABLE 语句中添加此语法成分,表示在修改表的同时为该表添加外键。

创建普通索引

创建普通索引时,通常使用 INDEX 关键字。
例 1
创建一个表 tb_stu_info,在该表的 height 字段创建普通索引。输入的 SQL 语句和执行过程如下所示。

mysql> CREATE TABLE tb_stu_info
    -> (
    -> id INT NOT NULL,
    -> name CHAR(45) DEFAULT NULL,
    -> dept_id INT DEFAULT NULL,
    -> age INT DEFAULT NULL,
    -> height INT DEFAULT NULL,
    -> INDEX(height)
    -> );
mysql> SHOW CREATE TABLE tb_stu_info\G
*************************** 1. row ***************************
       Table: tb_stu_info
Create Table: CREATE TABLE `tb_stu_info` (
  `id` int(11) NOT NULL,
  `name` char(45) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `height` int(11) DEFAULT NULL,
  KEY `height` (`height`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312

创建唯一索引

创建唯一索引,通常使用 UNIQUE 参数。

例 2
创建一个表 tb_stu_info2,在该表的 id 字段上使用 UNIQUE 关键字创建唯一索引。输入的 SQL 语句和执行过程如下所示。

mysql> CREATE TABLE tb_stu_info2
    -> (
    -> id INT NOT NULL,
    -> name CHAR(45) DEFAULT NULL,
    -> dept_id INT DEFAULT NULL,
    -> age INT DEFAULT NULL,
    -> height INT DEFAULT NULL,
    -> UNIQUE INDEX(height)
    -> );
mysql> SHOW CREATE TABLE tb_stu_info2\G
*************************** 1. row ***************************
       Table: tb_stu_info2
Create Table: CREATE TABLE `tb_stu_info2` (
  `id` int(11) NOT NULL,
  `name` char(45) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `height` int(11) DEFAULT NULL,
  UNIQUE KEY `height` (`height`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用CREATE INDEX命令可以创建索引。格式如下: ``` CREATE INDEX index_name ON table_name (column1, column2, ...); ``` 其中,index_name是索引的名称,table_name是表的名称,column1、column2等是要创建索引的列。 例如: ``` CREATE INDEX idx_name ON user (name, age); ``` 这个索引就是在user表的name和age字段建立的,索引名是idx_name。 ### 回答2: 创建索引是非常常见的数据库优化技巧之一,通过为数据库表创建索引可以提升查询速度和查询效率,加快数据库查询的响应时间,提升系统的性能。而使用create index命令可以方便快捷地为数据库表创建索引create index命令所涉及的主要关键字包含了索引的名称、索引的类型、需要为哪个数据库表创建索引以及需要为哪个表的哪一列创建索引等。假设我们需要为学生表(student)的学生姓名列(name)创建一个索引,我们可以使用如下的create index命令: create index idx_student_name on student(name); 执行该命令后,系统就会自动在学生表中的学生姓名列创建一个名为idx_student_name的索引,如果该列中包含重复的数据,那么该索引会自动设为唯一索引,如果需要创建非唯一索引,可以在命令后面添加关键字unique,如下所示: create index idx_student_name on student(name) unique; 此外,通过使用create index命令,我们还可以指定在创建索引时需要使用的算法和排序规则,以进一步优化索引的效率和速度。需要特别注意的是,在使用create index命令创建索引时,应该谨慎对待,不要过于频繁地创建索引,因为过多的索引会对系统性能造成不良影响,甚至会导致数据库的崩溃等问题。因此,在使用create index命令创建索引时,应该仔细评估所需的索引种类、范围和需要创建的数量,以确保系统的稳定性和可靠性。 ### 回答3: 什么是索引索引是一种用于加快查询速度的数据结构,它类似于字典的索引,可以帮助我们快速定位需要查找的数据。在数据库中,索引通常会在表的某些列上建立,以提高查询效率。 为什么需要使用索引? 当表中的数据量非常大时,查询数据的速度会变得非常缓慢,因为查询需要对整个表进行扫描。此时,索引就可以发挥作用,它可以快速定位需要查询的数据,从而加速查询速度。如果你有一个表,它的行数很大,同时你需要频繁地查询某个字段,那么就应该考虑为该字段创建索引。 如何使用create index创建索引? 在MySQL中,可以使用create index语句来创建索引,例如: ``` CREATE INDEX idx_name ON table_name(column_name); ``` 这将为表table_name中的列column_name创建一个名为idx_name的索引。需要注意的是,在为表创建索引时,需要选择合适的字段。通常,选择频繁查询的字段或经常用于连接查询的字段会带来最大的好处。 此外,使用索引还存在一些注意事项,例如: 1、不要为每个列都创建索引,否则会导致索引过多,从而降低插入、更新等操作的性能。 2、对于大型表,搜索索引需要耗费很多时间和内存,因此可能会导致性能问题。 3、索引需要定期维护,例如删除、更新、插入数据时,需要重新构建索引。 总之,在使用create index创建索引时,需要选择合适的字段,并避免过度索引,以免降低性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值