1.什么是索引:
在数据中,索引相当于字典的目录一下,通过索引可以快速的检索数据。
被面试问道索引的数据结构,可以参考这篇文章
https://www.jianshu.com/p/2f562c7f10a0
2.索引的特点:
优点:
可以提高数据库检索数据的速度
缺点:
只能提高查询速度,相反会降低新增,修改,删除的效率
浪费存储空间 索引不是越多越好,根据实际情况添加不同的索引
3.索引的创建:
单列索引:
适用场合:基于单个列建立索引,如果经常在where子句中引用某个列,那么应该考虑在该列上建立单列索引。
语法:
-- 在ename字段上面添加索引
CREATE INDEX index_ename ON EMP(ename);
-- 经常查询某一列 那么可以给这一列加索引
select * from emp where ename='SCOTT'
建立复合索引:
适用场合:经常查询的时候查询的是多列,如果想提高查询速度,可以建立复合索引查询
语法:
-- 添加复合索引
CREATE INDEX index_job_deptno ON EMP(job,deptno);
--查询语句
SELECT * FROM EMP WHERE job='ANALYST' AND deptno=20;
建立唯一索引:
适用场合:数据库表中的某一个字段不能重复,例如身份证号码.....
语法:
-- 给身份证号码,添加一个唯一索引
CREATE UNIQUE INDEX index_idcard on users(idcard);
建立位图索引
适用场合:位图索引适用于低基数列,即该列的值是可数的,例如员工的工种,图书的类别
语法:
-- 位图索引:适用于基础列(员工工种,图书类别,电影类别)
CREATE BITMAP index Index_job on EMP(job);
建立函数索引
适用场合:数据库表中的某一个字段,经常以函数的形式被调用
语法:
-- 函数索引
CREATE INDEX index_func_ename ON emp(UPPER(ename)); -- 提高SQL查询速度
SELECT * FROM EMP WHERE ename=UPPER('scott');
4.索引的删除:
语法:
DROP INDEX 索引名;
drop index index_idcard;