事务的主要特性:原子性、一致性、独立性和持久性(ACID)前端
数据库应用优化mysql
一、基本语句优化10个原则sql
1)尽可能避免在列上进行运算,这样会致使索引失效数据库
2)使用join时,应该用小结果集驱动大结果集。同时把复杂的join查询拆分红多个query后端
3)注意like模糊查询的使用,避免%%安全
4)仅列出须要查询的字段,这对速度不会有明显的影响,主要考虑节省内存服务器
5)使用批量插入语句节省交互数据结构
6)limit的基数比较大时使用between并发
7)不要使用rand函数获取多条随机记录异步
8)避免使用NULL
9)不要使用count(id),应该使用count(*)
10)不要作无谓的排序,应尽量在索引中完成排序
二、mysql索引创建和使用基本原则
1)合理设计和使用索引
2)在关键字的索引上,建与不建索引,查询速度相差近100倍
3)差的索引和没有索引效果同样
4)索引并不是越多越好,由于维护索引须要成本
5)每一个表的索引应在5个如下,应合理利用部分索引和联合索引
6)不在结果集中的结果单一的列上建索引
7)建索引的字段结果集最好分布均匀,或者符合正态分布
三、服务器和配置优化
选择存储引擎的基本原则:
1)采用MyISAM引擎:读/写>100:1且update相对较少;并发不高,不须要事务;表数据量小;硬件资源有限
2)采用InnoDB引擎:R/W比较小,频繁更新大字段;表数据量超过1000万,并发高;安全性和可用性要求高
3)采用Memory引擎:有足够的内存;对数据一致性要求不高;须要按期归档的数据
mysql服务器调整优化:
1)关闭没必要要的二进制日志和慢查询日志,仅在内存足够或开发调试时打开他们
2)适度使用query cache
3)增长mysql容许的最大链接数(show variables like 'max_connections')
4)对myisam表适当增长key_buffer_size
mysq瓶颈及应对措施:
1)增长mysql配置中的buffer和cache的数值,增长服务器cpu数量和内存的大小
2)使用第三方引擎或衍生版本
3)迁移其余数据库
数据库分区
概念:所谓分区就是把一个数据表的文件和索引分散存储在不一样的物理文件中。mysql支持的分区类型包括:range(经常使用)、list、hash、key
分区的注意事项:
1)主键或者惟一索引必须包含分区字段
2)不少时候,使用分区就不要再使用主键,可能影响性能
3)只能经过int类型的字段或者返回int类型的表达式来分区,一般用year或to_days等函数
4)每一个表最多1024个分区,不可能无限制扩展分区,并且过分使用分区每每会消耗大量系统内存
5)采用分区的表不支持外建
6)分区后,可能形成索引失效,须要验证分区可行性
数据库分表
概念:分表思想和分区相似,区别是:分区是把一个逻辑文件分红几个物理文件后进行存储,而分表则是把原先宇哥表拆分红几个表。进行分表查询时,能够union或者作一个视图。分表又分为垂直切分和水平切分,其中水平切分最经常使用
mysql高级应用
一、mysql自增加序列(auto_increment)
可能须要使用序列的状况:
1)业务复杂,须要定制和控制主键时
2)但愿手工维护自增加,方便数据迁移
3)须要业务上一个有意义的主键时,好比单据号
4)当事务跨多表,指望事务可靠性
5)主键很明确的须要和其余表关联时
6)指望主键是惟一的,不须要重复利用时
二、msql视图
概念:视图是一个虚拟表,其内容由查询定义。对其中所引用的基础表来讲,视图的做用相似于筛选,筛选
当前或者其余数据库的一个或多个表
建立视图的注意事项:
1)select语句不能包含from子句中的子查询
2)select语句不能引用系统或用户变量
3)select语句不能引用预处理语句
4)在存储子程序内,定义不能引用子程序的参数或局部变量
5)在定义中引用的表或视图必须存在
6)在定义中不能引用temporary表,不能建立temporary
7)在视图定义中命名的表必须已存在
8)不能将触发程序与视图关联在一块儿
9)在试图定义中容许使用order by,可是,若是从特定视图进行了选择,而视图又使用了具备本身的order by的语句,他将被忽略
10)不能给视图添加索引
11)视图一般不容许更新
三、mysql存储过程和事件调度
概念:利用sql语言完成复杂的数据库层业务操做,经过编写存储过程来实现
建立存储过程步骤:
1)肯定输入/输出参数和类型(IN表示输入参数,$tname是参数名,varchar(20)是参数类型)
2)定义变量和赋值(使用declare关键字定义变量,set关键字用来赋值)
3)过程的主体部分,能够是各类运算,也能够是数据库操做
4)程序的返回值。能够有返回值,也能够无返回值
优缺点:存储过程能提高效率,还具备模块化、易于复用、能够移植等特色,但mysql存储过程没有强大的调试工具,不易维护。
四、mysql模拟消息队列:
队列概念:队列和栈同样,是一种线性表结构,不过队列是一种先进先出的数据结构。队列只容许在后端进行插入操做,在前端进行删除操做。
消息队列:在消息的传输过程当中保存消息的容器
消息队列管理器:将消息从它的源中继到它的目标时充当中间人的角色
队列做用:主要提供路由并保证筱梓的传递,若是发送消息时接收者不可用,消息队列会保留消息,直到成功的传递。
消息队列做用:能够很好的异步处理数据传送和存储,当频繁地向数据库中插入数据时,就可采起消息队列异步插入。另外,可将较慢的处理逻辑、有并发数量限制的处理逻辑,经过消息队列放在后台处理。如:视频转换、发送手机短信
五、sql注入漏洞与防范:
1)若是是整型变量或字段,使用intval()函数把全部传入参数转化为一个数值
2)对于字符型变量,用addslashes()会把全部的单引号、双引号、反斜线和空字符转换为含有反斜线的溢出字符
3)转义或过滤一些特殊字符
4)保护表结构等关键信息
5)任何状况下作好安全备份