MySQL数据库总结
数据库存储的原理:
存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,储存过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。
存储过程有以下优点:
1、存储过程能实现较快的执行速度
2、存储过程允许标准组件是编程
3、存储过程可以用流程控制语句编写,有较强的灵活性,可以完成复杂的判断和较复杂的运算
4、存储过程可被作为一种安全机制来允许利用
5、存储过程和能减少网络流量
数据库优化:
1、优化索引,SQL语句,分析慢查询
2、设计表的时候完全根据数据库的设计范式来设计数据库
3、使用缓存,把经常访问的数据而且不需要经常变化的数据放到缓存中,能节约磁盘IO
4、优化硬件;采用SSD,使用磁盘队列技术(RAID0,RAID1,RAID5)等
5、采用MYSQL内部自带的表分区技术,把数据分层不同的文件,能提高磁盘的读取效率
6、垂直分表;把一些不经常读的数据放到一张表里,节约磁盘IO
7、主从分离读写;采用主从复制把数据库的读操作和写操作分离开来
8、分库分表分机器,主要的原理就是数据路由
9、选择合适的表引擎,参数上的优化
10、进行架构级别的缓存,静态化和分布式
11、不采用全文索引
12、采用更快的存储方式,例如NOSQL存储经常访问的数据
数据库优化查询效率:
1、应尽量避免全表扫描,首先应考虑where 及 order by 涉及的列上建立索引
2、应尽量避免在where字句中对字段进行null的判断,避免使用!= 或 < > 操作符,避免使用 or 连接条件,或者where 参数中使用参数,对字段进行表达式或者函数操作,否则系统将无法正确使用索引
3、不要在where 子句中的 "=" 左边进行函数、算术运算或者其他表达式运算,否则系统将可能无法正确使用索引
4、使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不能被使用
5、很多时候可以使用exists 代替 in
6、尽量使用数字型字段
7、尽可能的使用varchar/nvarchar 代替 char/nchar
8、任何地方都不要使用sekect * from t ,用具体的字段列表代替 * , 不要返回用不到的任何字段
9、尽量使用表变量代替临时表
10、避免频繁创建和删除临时表,以减少系统表资源的消耗
11、尽量避免使用游标,因为游标的效率较差
12、在所有的存储过程和触发器的开始处设施set nocount on ,在结束时设置 set nocount off
13、尽量避免大事务操作,提高系统并发能力
14、尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理
事务的特性:
1、原子性:事务的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行
2、一致性:几个并行执行的事务,其执行结果必须安某一顺序串行执行的结果相一致
3、隔离性: 事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的
4、持久性:对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障