b-tree*索引
索引
快速查询
数据量:百万条之上。
节省的时间:毫秒级的
查询方式:索引
缺点:占用磁盘空间。
Create index 索引名称 on 表名(列名);
经常根据哪一列查就在哪一列建索引
系统在建表的时候会根据主键自动建索引
Select * from 表名 where name=“列名”;
建索引之后内部流程不同,表面没有不同
唯一索引:unique
加它的前提:使用于不重复的字段
比普通索引搞
有唯一约束:保证数据的唯一性
Create unique index 索引名字 on 表名(列名);
如果创建失败,就说明数据库已经存在了
复合索引:
基于某几列创建索引:按照地址编号和门牌号组合出现,为这两列创建索引
Create index 索引名 on 表名 (列名1,列名2);
创建一个索引就是一棵树,和普通索引的区别:分别建索引是两棵树,组合索引是查一棵树。
顺序要求:使用的时候顺序要求比较死
反向键索引:当某一字段的值为连续值
如果把连续的数存储在该树上的时候会由于树太深导致查询时间过长。
用二进制的0-1,1-0对应的转换将数字转化。
Create index 索引名称 on 表名(列名) reverse;
非b-tree索引
位图索引:
一张图片是带像素的。
为每一个可能存在的数据存在像素点上,之间无顺序。
Select * from t_oweners where sex=’男’;
会找到这个位图,然后提取所有的rownum,位图索引快。
占用的空间少。
但是局限于:低基数列,可能数列是有限的。只能用等号查。不能按范围查询。
存储过程
存储过程和存储函数差别不大,存储函数用于查询。
区别:函数返回多值,
存储过程:得调用传出函数来传出多个值。
存储过程不能在sql语句中直接用,用应用程序java等调用,是一套业务逻辑的封装,写在数据库中,编程语言不写逻辑直接调用数据库中的存储过程。存储过程和三大框架的思想是不兼容的。
存储过程比三大框架的效率高。
存储过程的语法:create [or replace] procedure 存储过程名
(参数名 类型,参数名 类型,参数名 类型)
Is|as
变量声明部分;
Begin
逻辑部分
【Exception
异常处理部分】
End;
传入参数:in 传入参数。out 传出参数。In out传入传出参数。
存储过程的调用:
Call 存储过程名(字段的各种值);
Begin
存储过程名(字段的各种值);
End
以下引用自:https://www.cnblogs.com/zlbx/p/4818007.html
存储过程与存储函数的区别和联系
相同点:1.创建语法结构相似,都可以携带多个传入参数和传出参数。
2.都是一次编译,多次执行。
不同点:1.存储过程定义关键字用procedure,函数定义用function。
2.存储过程中不能用return返回值,但函数中可以,而且函数中必须有return子句。
3.执行方式略有不同,存储过程的执行方式有两种(1.使用execute 2.使用begin和end 3call),函数除了存储过程的两种方式外,还可以当做表达式使用,例如放在select中(select f1() form dual;)。
总结:如果只有一个返回值,用存储函数,否则,一般用存储过程。