索引

索引分类:

  • 单列索引:一个索引只包含单个列
    • 普通索引:没有限制
    • 唯一索引:索引列中的值必须是惟一的,允许空值
    • 主键索引:特殊唯一索引,不允许有空值
  • 组合索引:
  • 全文索引:只有 MyISAMM 引擎才能使用。只能在字符串字段上使用
  • 空间索引

索引可以提高查询速度,但会降低写入速度。

普通索引

// 直接创建普通索引
create index 索引名 on 表名(字段名);
CREATE [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] 索引名称 ON 表名(创建索引的字段名[length])[ASC|DESC]

// 修改表结构添加索引
alter table 表名 add index 索引名(字段名);
ALTER TABLE 表名 ADD[UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [索引名] (索引字段名)[ASC|DESC]
ALTER TABLE book ADD INDEX BkNameIdx(bookname(30));


// 创建表时直接指定索引
create table table_name(
id int not noll,
username varchar(16) not null,
index(username),
index [indexname](username(length))
);

// 删除索引
drop index [indexname] on 表名;
alter table 表名 drop index c;

唯一索引

索引列的值必须唯一,允许有空值。

// 直接创建
create unique index 索引名 on 表名(username(length));

// 修改表结构创建
alter table 表名 add unique [索引名] (列名(length));
ALTER TABLE 表名 ADD[UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [索引名] (索引字段名)[ASC|DESC]
ALTER TABLE book ADD INDEX BkNameIdx(bookname(30));

// 创建表时直接指定
create table table_name(
id int not null,
username varchar(16),
unique index uniqudx(id),    # 设定了索引名
unique [indexnaem] (username(length))
);

组合索引

CREATE TABLE t3(
	id INT NOT NULL,
	name CHAR(30) NOT NULL,
	age INT NOT NULL,
	info VARCHAR(255),
	INDEX MultiIdx(id,name,age)
);

全文索引

全文索引可以用于全文搜索,但只有MyISAM存储引擎支持FULLTEXT索引,并且只为CHAR、VARCHAR和TEXT列服务。索引总是对整个列进行,不支持前缀索引。

CREATE TABLE t4(
	id  INT NOT NULL,
	name CHAR(30) NOT NULL,
	age INT NOT NULL,
	info VARCHAR(255),
	FULLTEXT INDEX FullTxtIdx(info)
)ENGINE=MyISAM;

SELECT * FROM t4 WHERE match(info) against('gorlr');

查看索引

show index from 表名;

删除索引

alter table 表名 drop index 索引名;
drop index 索引名 on 表名;

查询语句前面添加 EXPLAIN 指定使用索引查询。

posted @ 2021-04-28 15:28  华青少年  阅读(50)  评论(0)    收藏  举报