存储过程
存储过程概念
Mysql储存过程是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了,简而言之就是一组已经写好的命令,需要使用的时候拿出来用就可以了。
存储过程作用好处
因为是提前写好的,所以运行速度相对于批处理要快
可以多次被调用,随时修改,所以调用简单,使用灵活
还可以通过执行某一存储过程的权限进行限制,能设置相应的数据的访问权限的限制,保证了数据的安全。
存储过程与存储函数区别
存在意义 返回类型 调用机制
- 存储过程:
1) 一般用于在数据库中完成特定的业务 任务的
2) 可以定义返回类型,也可以不定义返回类型
3) SQL 语句中不可以调用
- 函数:
1) 一般用于特定的数据查询或数据转换处理
2) 申请时必须要定义返回类型,且程序体中必须定义return 语句。
3) 不能独立执行,必须被SQL调用
索引
索引概念
索引就是为了我们高效查询数据,用特定算法产生的数据结构,这种结构方便进行快速检索数据,但是会增加数据库内存,如果更新数据同时还要更新索引(结构的实现是B树及其变种B+树)满足特定查找算法
索引原理
图展示了一种可能的索引方式。左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找在O(log2n)的复杂度内获取到相应数据。
三种索引
唯一索引
就是不允许存在重复索引值的索引,这样可以防止数据库添加重复键值的数据
主键索引
可以自动创建主键索引,要求每个主键值不重复,也算唯一索引一种特定类型
聚集索引
让表中行的顺序与键值的逻辑顺序相同,这样可以提供刚快访问速度
索引优缺点
优点
提高系统的性能,提供了加快检索速度,加强检索能力
通过创建唯一性索引,可以确保每行数据唯一性
加块了分组排序与表间连接的时间
缺点
需要耗费大量时间创建索引,占用空间大
数据库更新时还需要更新索引
哪些列上适合创建索引
列上创建索引方然是为了发挥索引优势
加快检索速度,加强检索能力-----在经常需要搜索的列上创建
通过创建唯一性索引,可以确保每行数据唯一性-----在作为主键的列上
加块了分组排序与表间连接的时间-----在经常用到排序、连接的列上
哪些列上不适合创建索引
相反不经常查询得列,数据量大、取值少的列,说白了就是冷门的数据,根本不值得用索引的
SQL优化
数据库优化问题
合理的为数据库合理创建索引
优化查询语句,尽量避免全表扫描,select*等,注意在where和group by上创建索引时,尽量不要给字段设置null而是not null,判断null会导致放弃索引而全表扫描,同理慎用!=,<>,or等连接符
建立存储过程,触发器,可提高查询速度。