首页 > 数据库 > 数据库开发技术 > 《MySQL 入门教程》第 30 篇 数据库索引
CREATE [UNIQUE] INDEX index_nameON table_name(col1 [ASC | DESC], ...);ALTER TABLE table_name ADD INDEX index_name (col1 [ASC | DESC], ...);
CREATE TABLE t_index(
id INT PRIMARY KEY,
c1 INT,
c2 INT,
c3 VARCHAR(50));CREATE INDEX idx_c1 ON t_index(c1);
EXPLAINSELECT *FROM t_indexWHERE c1 = 100;id|select_type|table |partitions|type|possible_keys|key |key_len|ref |rows|filtered|Extra|--|-----------|-------|----------|----|-------------|------|-------|-----|----|--------|-----|
1|SIMPLE |t_index| |ref |idx_c1 |idx_c1|5 |const| 1| 100.0| |
CREATE INDEX index_nameON table_name(column_name(length));
CREATE INDEX idx_c3_prefix ON t_index(c3(20));
CREATE INDEX idx_c3_func ON t_index( (upper(c3)) );
SELECT *FROM t_indexWHERE upper(c3) = 'ABC';
CREATE [UNIQUE] INDEX index_nameON table_name(col1 [ASC | DESC], ...)VISIBLE | INVISIBLE;
CREATE INDEX idx_c1_c2 ON t_index(c1 ASC, c2 DESC);
SELECT *FROM t_indexWHERE c1 = 100ORDER BY c2 DESC;
mysql> show index from t_index\G*************************** 1. row ***************************
Table: t_index
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
Visible: YES
Expression: NULL...*************************** 6. row ***************************
Table: t_index
Non_unique: 1
Key_name: idx_c3_func
Seq_in_index: 1
Column_name: NULL
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
Visible: YES
Expression: upper(`c3`)6 rows in set (0.00 sec)
Table 是表的名称;
Non_unique 表示是否唯一索引,0 表示非唯一索引;
Key_name 是索引名称,主键索引的名称为 PRIMARY;
Seq_in_index 表示字段在索引中的顺序,从 1 开始。SHOW INDEX 对于复合索引会返回多行结果;
Column_name 是字段名称,对于函数索引显示为 NULL;
Collation 表示索引中该字段的存储顺序,A 表示升序,D 表示降序,NULL 表示未排序。
Cardinality 表示索引中唯一值的估计,运行 ANALYZE TABLE 或者 myisamchk -a(MyISAM 表)命令可以更新统计值;
Sub_part 表示前缀索引的长度,普通索引为 NULL;
Packed 表示索引键的打包方式,NULL 表示未打包;
Null 表示索引是否允许空值,YES 表示允许;
Index_type 是索引方法,包括 BTREE、FULLTEXT、HASH、RTREE 等;
Comment 是关于索引的描述信息,例如索引被禁用时显示为 disabled;
Index_comment 是索引的备注信息,通过 COMMENT 属性添加备注;
Visible 表示索引对于优化器的可见性;
Expression 是函数索引的表达式,普通索引显示为 NULL。
ALTER TABLE table_name ALTER INDEX index_name {VISIBLE | INVISIBLE};ALTER TABLE table_name RENAME INDEX old_index_name TO new_index_name;
ALTER TABLE t_index ALTER INDEX idx_c1 INVISIBLE;EXPLAINSELECT *FROM t_indexWHERE c1 = 100;id|select_type|table |partitions|type|possible_keys|key |key_len|ref |rows|filtered|Extra|--|-----------|-------|----------|----|-------------|---------|-------|-----|----|--------|-----|
1|SIMPLE |t_index| |ref |idx_c1_c2 |idx_c1_c2|5 |const| 1| 100.0| |
DROP INDEX index_name ON table_name;ALTER TABLE table_name DROP INDEX index_name;
DROP INDEX idx_c1 ON t_index;
原文作者:SQL编程思想;如有侵权,请联系管理员删除。