索引:就是在表字段添加,提高查询效率。(本质是缩小扫描范围)
create index emp_ename_index on emp(ename)
给表emp的字段ename添加索引,索引名为emp_ename_index
drop index emp_ename_index on emp //删除索引
下面这些情况才适合添加索引,并不是索引越多越好。
1.数据量庞大
2.该字段经常出现在where后面
3.该字段很少DML操作
因为索引需要维护,太多反而会降低系统性能
索引底层的数据结构是B-Tree,左小右大 中序遍历
什么?你问我什么是中序遍历
中序遍历先遍历左子树,然后访问根结点,最后遍历右子树
如图所示二叉树,中序遍历结果:DBEAFC
在任何数据库,主键都会自动添加索引。
在mysql,字段要是有unique约束也会自动创建索引
索引是一个单独对象,不同的存储引擎索引以不同的形式存在
MyIsAM .NYI文件中
innoDB tablespace中
MeMory 内存
索引在有些情况下也会失效的
如ename like '%T'
所以模糊查询尽量避免'%'开头
视图(view)
把复杂又常用的sql语句以视图对象创建,视图存在硬盘上不会消失。
create view emp_view as select * from emp //创建视图
drop view emp_view //删除视图
只有DQL语句(查询)才能以view形式创建
视图最大特点就是对视图的CRUD,会导致原表被操作