添加索引是给某一个字段,或者某些字段添加索引
select empno,ename,sal from emp where ename='smith';
当ename字段上没有添加索引的时候,这个sql语句会进行全表扫描,扫描ename字段中的所有值。
当ename字段上添加索引的时候,这个sql语句会根据索引扫描,快速定位。
// MySQL中才有这个语句
// type ALL 全表扫描
// rows 14 扫描14次
mysql> explain select ename,sal from emp where sal=5000;
+--+-----------+-----+----------+----+-------------+----+-------+----+----+--------+-----------+
|id|select_type|table|partitions|type|possible_keys|key |key_len|ref |rows|filtered|Extra |
+--+-----------+-----+----------+----+-------------+----+-------+----+----+--------+-----------+
| 1|SIMPLE |emp |NULL |ALL |NULL |NULL|NULL |NULL| 14| 10.00|Using where|
+--+-----------+-----+----------+----+-------------+----+-------+----+----+--------+-----------+
1 row in set, 1 warning (0.01 sec)
创建索引对象
语法:
create index 索引名称 on 表名 (字段名);
// 创建索引对象
mysql> create index emp_sal_index on emp(sal);
// 查看sql语句的执行计划
// type ref
// rows 1 扫描1次
mysql> explain select ename,sal from emp where sal=5000;
+--+-----------+-----+----------+----+-------------+-------------+-------+-----+----+--------+-----+
|id|select_type|table|partitions|type|possible_keys|key |key_len|ref |rows|filtered|Extra|
+--+-----------+-----+----------+----+-------------+-------------+-------+-----+----+--------+-----+
| 1|SIMPLE |emp |NULL |ref |emp_sal_index|emp_sal_index|9 |const| 1| 100.00|NULL |
+--+-----------+-----+----------+----+-------------+-------------+-------+-----+----+--------+-----+
1 row in set, 1 warning (0.00 sec)
删除索引对象
语法:
drop index 索引名称 on 表名;
drop index emp_sal_index on emp;
drop index index_name on talbe_name
alter table table_name drop index index_name
alter table table_name drop primary key
其中,前两条语句是等价的,删除掉table_name中的索引index_name。
第3条语句只在删除primary key索引时使用,因为一个表只可能有一个primary key索引。