数据库本质是文件,对其进行操作也就是对文件进行io流操作
批量操作相比于单条数据操作,减少了IO流操作的次数,有效的提高了操作性能
不管执行什么sql语句,都会记录日志,一次sql操作会有两次io流操作
查询有关联的表的数据时,最好不要采用子查询(尤其是相关子查询),使用联表查询的本质还是减少io流操作
硬件上提升
MySQL数据库引擎:
1、INNODB:
支持事务处理(能够回滚)
支持外键约束
不支持全文索引
2、MyISAM:
不支持事务处理
不支持外键约束
支持全文索引
写操作多于读操作时,使用INNODB;
读操作多于写操作时,能够承担数据风险时,使用MyISAM
小型应用一般使用MyISAM
大型应用使用INNODB(数据量大于百万以上,且需要进行事务控制或外键约束)
选择引擎时需要考虑
1、是否需要支持事务
2、是否要使用全文索引
3、数据量的大小
索引(INEDEX)
索引是对数据库表中一列或多列的字段值进行排序的一种结构
用于提高查询性能,但是降低了数据操作的性能,进行数据操作时会同时维护索引
单列索引:
普通索引:没有限制
唯一索引:值必须为唯一,允许空值(unique)
主键索引:值不能为空的唯一索引
全文索引:用于检索文本信息,仅MyISAM可用
组合索引:
组合普通索引
组合唯一索引:遵循“最左前缀”原则
使用索引的优缺点:
可以通过建立唯一索引保证数据库中每一行数据的唯一性
建立索引可以减少表的检索行数,提高检索数据的速度
建立索引可以加速表与表之间直接的相连,提升联表查询效率
在分组和排序字句进行数据检索时,可以减少查询时间中分组和排序消耗的时间(数据库记录重新排列)
建立索引可以在查询中使用索引,可以大大提高性能
在创建和维护索引,会消耗更多的事件
索引会占据物理空间,除了数据表需要占用物理空间之外,每一个索引还会占用一定的物理空间
当对表进行更新操作时,索引也要动态维护,会增加维护所需的时间
判断是否为null时引擎会放弃使用索引
视图(VIEW)
视图是一种数据库虚拟表,只包含使用时动态检索数据的查询
视图仅仅是用来查看存储在别处的数据的一种方式。本身不包含数据,在改变数据后,视图会返回改变过的数据
通常只做查询操作
使用视图简化查询语句
使用视图重新格式化查询的数据
使用视图过滤不想要的数据
使用视图计算多个字段
规则和限制
视图名不能重复
视图创建需要足够的权限
视图数量没有限制
视图可以嵌套
允许使用order by进行排序
视图不支持索引和触发器
视图可以和表一起使用
作用
重用SQL语句
简化复杂的SQL操作
使用表的组成部分而不是整个表
保护数据
更改数据格式和表示
触发器(TRIGGER)(检查格式、数据备份)
是由事件来触发某个操作,当数据库执行事件时,会激活触发器执行相应的操作
不支持视图
使用old和new来获取
存储过程(Stored Procedure)
存储过程是存储在数据库中可以执行特定功能的一组sql代码的程序段,类似一门程序设计语言,
也包括了数据类型、流程控制、输入和输出和它自己的函数库。
性能高,
存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,
所以使用存储过程可提高数据库执行速度,效率要比T-SQL语句高。
节省流量,
一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。
简化开发,
存储过程可以重复使用,可减少数据库开发人员的工作量。
当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
安全性高,可设定只有某些用户才具有对指定存储过程的使用权
不具备可移植性,
各个数据库所用语法不同,无法跨数据库使用
与触发器类似,创建后无法进行修改
定义变量使用Declare,default设置初始默认值。
局部变量在声明时需要声明数据类型,用户变量可不声明,其他进程可调用。
使用select设置变量的化只能使用“:=”,set可以使用“=”和“:=”
容器的范围需要比数据大
存储过程的参数由三部分组成:参数类型,参数名称,数据类型
流程控制
if判断
switch选择
循环
while
repeat
loop