mysql 索引
一张表很多的字段,每个字段都可以添加索引,合理的添加索引能有效的提高数据库检索效率,反之还会降低检索速度。
什么时候需要添加索引呢
- 数据量大
- 用于where
- update, insert较少的字段,如果一个表的数据经常变动,那就没有必要添加索引了,频繁的维护索引会使得效率降低
- 非空字段
1、查看索引
"show index from 表名;" 查看某张表所有的索引
1)查看stu表所有索引
mysql> mysql> show index from stu; +-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | stu | 0 | PRIMARY | 1 | stu_id | A | 7 | NULL | NULL | | BTREE | | | | stu | 1 | fk_stu_cls | 1 | cls_id | A | 3 | NULL | NULL | YES | BTREE | | | +-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 2 rows in set (0.00 sec)
2、添加索引
"create index 索引名 on table(字段名(长度));" 字段为数值类型可以不用写长度
1)单列索引。给stu表中的name字段添加索引
mysql> create index ind_stu_name on stu(name(10));
2)组合索引,一个组合索引可以包含多个列。给stu表中 name age 字段添加一个索引
mysql> create index ind_stu_name_age on stu(name(10), age);
3)创建表的时候指定索引
create table stu( id int auto_increment primary key, name varchar(30), index ind_name (name(10)) );
4)修改表结构添加
alter table 表名 add 索引类型 索引名 (字段(length));
3、删除索引
"drop index 索引名 on 表名;"
1)删除stu表 ind_name 索引
drop index ind_name on stu;