MySQL/Language/Index
< MySQL
根据索引的原理,全NULL值不被记录在索引上
索引类型
编辑- 主键索引 PRIMARY KEY: 唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引。一个表只能有一个主键
- 唯一索引 UNIQUE: 列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。可以通过ALTER TABLE table_name ADD UNIQUE (column);创建唯一索引。可以通过ALTER TABLE table_name ADD UNIQUE (column1,column2);创建唯一组合索引
- 外键索引 foreign key上建立了一个index;(至少在oracle上建立外键,不会自动建立index)
- 普通索引 INDEX:最基本的索引,它没有任何限制。可以通过ALTER TABLE table_name ADD INDEX index_name (column);创建普通索引
- 组合索引 INDEX:即一个索引包含多个列。多用于避免回表查询。可以通过ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);创建组合索引
- 全文索引 FULLTEXT:是目前搜索引擎使用的一种关键技术。可以通过ALTER TABLE table_name ADD FULLTEXT (column);创建全文索引
- 前缀索引
删除索引
编辑索引一经创建不能修改,如果要修改索引,只能删除重建。可以使用DROP INDEX index_name ON table_name;删除索引。
索引设计的原则
编辑- 适合索引的列是出现在where子句中的列,或者连接子句中指定的列
- 基数较小的类,索引效果较差,没有必要在此列建立索引
- 使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间
- 不要过度索引。索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长。所以只保持需要的索引有利于查询即可。
重建索引命令
编辑mysql> REPAIR TABLE tbl_name QUICK;
查询数据表索引
编辑mysql> SHOW INDEX FROM tbl_name;
创建键与索引
编辑主键、唯一键、外键的创建方式:
- 在字段级以key方式建立, 如 create table t (id int not null primary key);
- 在表级以constraint方式建立,如create table t(id int, CONSTRAINT pk_t_id PRIMARY key (id));
- 在表级以key方式建立,如create table t(id int, primary key (id));
在CREATE TABLE语句中的key关键字单用,是指普通索引。
ALTER TABLE语句创建索引(PRIMARY KEY,INDEX,UNIQUE)
mysql>ALTER TABLE tbl_name ADD INDEX index_name (column list); mysql>ALTER TABLE tbl_name ADD UNIQUE index_name (column list); mysql>ALTER TABLE tbl_name ADD PRIMARY KEY index_name (column list);
删除索引与键
编辑mysql>ALTER TABLE tbl_name DROP INDEX index_name (column list); mysql>ALTER TABLE tbl_name DROP UNIQUE index_name (column list); mysql>ALTER TABLE tbl_name DROP PRIMARY KEY index_name (column list);