一.索引的作用

        数据库索引好比是一本书前面的目录,能提升数据库的查询效率.

二.索引的类型

1.普通索引 : index

        这是最基本的索引,它没有任何限制, 允许在定义索引的列中插入重复值和空值.

2.主键索引 :primary 

        主键列中的每个值是非空唯一的, 一个主键将自动创建主键索引

3.唯一索引: unique  

        与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须是唯一的,创建方法和普通索引类似。

4.复合索引

平时用的SQL查询,语句一般都有比较多的限制条件,所以为了进一步榨取MySQL的效率,就要考虑建立复合索引。
例如对表中针对title和time建立一个组合索引:

ALTER TABLE article ADD INDEX index_title_time (title(50),time(10))

5.全文索引 :fulltext

        支持值的全文查找,允许重复值和空值(但是一般不用)

6.空间索引 :  spatial

        对空间数据类型的列建立的索引 

三、创建方式

  • 直接创建索引

示例1 :普通索引

CREATE INDEX index_name ON table(column(length))

示例2: 唯一索引

CREATE UNIQUE INDEX index_name ON table(column(length))
  • 修改表结构的方式添加索引

示例1 :普通索引

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

示例2: 唯一索引

ALTER TABLE table_name ADD UNIQUE INDEX index_name ON (column(length))
  • 创建表的时候同时创建索引
  • 单列索引(示例):

CREATE TABLE projectfile (
	id INT AUTO_INCREMENT COMMENT '附件id',
	fileuploadercode VARCHAR(128) COMMENT '附件上传者code',
	projectid INT COMMENT '项目id;此列受project表中的id列约束',
	filename VARCHAR (512) COMMENT '附件名',
	fileurl VARCHAR (512) COMMENT '附件下载地址',
	filesize BIGINT COMMENT '附件大小,单位Byte',
	-- 主键本身也是一种索引(注:也可以在上面的创建字段时使该字段主键自增)
        PRIMARY KEY (id),
	-- 主外键约束(注:project表中的id字段约束了此表中的projectid字段)
	FOREIGN KEY (projectid) REFERENCES project (id),
	-- 给projectid字段创建了唯一索引(注:也可以在上面的创建字段时使用unique来创建唯一索引)
	UNIQUE INDEX (projectid),
	-- 给fileuploadercode字段创建普通索引
	INDEX (fileuploadercode)
	-- 指定使用INNODB存储引擎(该引擎支持事务)、utf8字符编码
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT '项目附件表';

复合索引(示例):

CREATE TABLE projectfile (
	id INT AUTO_INCREMENT COMMENT '附件id',
	fileuploadercode VARCHAR(128) COMMENT '附件上传者code',
	projectid INT COMMENT '项目id;此列受project表中的id列约束',
	filename VARCHAR (512) COMMENT '附件名',
	fileurl VARCHAR (512) COMMENT '附件下载地址',
	filesize BIGINT COMMENT '附件大小,单位Byte',
	-- 主键本身也是一种索引(注:也可以在上面的创建字段时使该字段主键自增)
        PRIMARY KEY (id),
        -- 创建组合索引
	INDEX (fileuploadercode,projectid)
	-- 指定使用INNODB存储引擎(该引擎支持事务)、utf8字符编码
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT '项目附件表';

​​四、索引的删除

方法一:DROP INDEX 索引名 ON 表名

示例:drop index fileuploadercode1 on projectfile;

方法二:ALTER TABLE 表名 DROP INDEX 索引名
示例:alter table projectfile drop index s2123;

五、查看已创建的索引

show index from 表名;


 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐