多列索引详解
多列索引
多列索引,是指在创建索引时所关联的字段不是一个字段,而是多个字段,虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段中的第一个字段,多列索引才会被使用。
创建表时定义索引
CREATE TABLE tablename(
propname1 type1,
……
propnamen type…n,INDEX
| KEY
[indexname] (propname1 [(length)] [ ASC | DESC ],
Propname2 [(length)] [ ASC | DESC ],
… …
Propnamen [(length)] [ ASC | DESC ])
);
注意
:和普通索引定义基本相同,不同之处就是增加了多个索引列。
mysql> create database school; #创建数据库school
mysql> use school; #选择数据库school
mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64), INDEX index_mult_columns(id, teacher)); #创建表class, 并建立包含id,teacher字段的多列索引
mysql> show create table class; #查看表定义
mysql> insert into class values(1, '一班', 'Martin'); # 插入记录1
mysql> insert into class values(1, '二班', 'Rock'); # 插入记录2
mysql> select * from class where id > 0 ; #仅根据id查询记录会启用多列索引
已存在的表上创建索引
方法一: 执行create 语句
CREATE INDEX indexname
ON tablename( propname1 [(length)] [ ASC | DESC ],
Propname2 [(length)] [ ASC | DESC ],
… …
Propnamen [(length)] [ ASC | DESC ] );
在上述语句中,关键字CREATE INDEX表示用来创建多列索引。
如下例表已存在,可通过CREATE语句创建多列索引:
mysql> create database school; #创建数据库school
mysql> use school; #选择数据库school
mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64)); #创建表class, 并建立为id 字段索引
mysql> create index index_id on class(id, name ); #追加多列索引
mysql> show create table class; #查看表定义
方法二: 执行ALTER TABLE 语句
除了上述两种方式来创建全文索引外,在MySQL中创建全文索引还可以通过SQL语句ALTER来实现,其语法形式如下:
ALTER TABLE tablename
ADD INDEX|KEY indexname(propname1 [(length)] [ ASC | DESC ],
Propname2 [(length)] [ ASC | DESC ],
... ...
Propnamen [(length)] [ ASC | DESC ] );
隐藏索引
MySQL 8开始支持隐藏索引。隐藏索引提供了更人性化的数据库操作。
隐藏索引,顾名思义,让索引暂时不可见,不会被优化器使用。默认情况下索引是可见的。隐藏索引可以用来测试索引的性能。验证索引的必要性时不需要删除索引,可以先将索引隐藏,如果优化器性能无影响就可以真正地删除索引。
ALTER TABLE tablename ALTER INDEX index_name INVISIBLE
; #隐藏索引
ALTER TABLE tablename ALTER INDEX index_name VISIBLE
; #取消隐藏
删除索引
所谓删除索引,就是删除表中已经创建的索引。之所以要删除索引,是因为这些索引会降低表的更新速度,影响数据库的性能。
在MySQL中删除索引通过SQL语句DROP INDEX来实现,其语法形式如下:
DROP INDEX indexname ON tablename;
修改索引
先删除,后增加
具体操作
结语:
时间: 2020-07-10