7 mysql高级特性
7.1 分区表
分区表的原理和作用
分区表的一些限制
分区表的类型
partition by range与partition by range column
使用分区表的技巧,怎么提高查询效率
7.2 外键的一些使用
作为外键的主表必须是唯一且非空,
外键能够保持数据的一致性和完整性
7.3 事件与存储过程
创建存储过程
create procedure del_data(IN `date_inter` int)
begin
delete from t_xxx where date < date_sub(curdate(),interval 7 day);
delete from t_log where date < date_sub(curdate(),interval date_inter day);
end
创建事件
create event del_event
on schedule
EVERY 1 day
STARTS '2014-01-01 03:00:00'
ON COMPLETION PRESERVE ENABLE
do call del_data(30)
关闭事件任务: alter event del_event ON COMPLETION PRESERVE DISABLE;
开户事件任务: alter event del_event ON COMPLETION PRESERVE ENABLE;
7.5 视图
视图在权限管理中的作用
merge、template、default三种类型的视图
7.6 游标的使用
有时,数据在服务器内部遍历行,处理完后,只需要返回少量的数据给客户端,这时,使用游标能够提高效率
7.7 绑定变量
客户端绑定变量,能够减少执行计划的解析次数,提高传输效率
服务器端的绑定变量,可以使存储过程更加灵活
绑定变量是会话级别的,会话关闭则失效,绑定变量的sql由于变量的变化,导致无法使用缓存,
7.8 全文索引
7.9 分布式事务(XA)
由于存储引擎是独立部署的(包括日志),所以mysql单库不同存储引擎之间的事务提交也是分布式的。
mysql可以是一个分布式事务的参与者,也可以作为协调者协调mysql的分布式事务。
XA只是一种在不同服务之间同步数据的一种方法,由于其事务特性,使得有时使用XA的代价非常高,有时可以使用其他方法替代XA。
7.10 查询缓存
查询缓存对应用程序是完全透明的。
mysql首先查看sql语句中没有不确定的东西(CURRENT_DAY,NOW(),绑定变量,CONNECTION_ID等),如果有,则不缓存,也不从缓存中查找,如果没有,则针对这个sql生成hash值,然后以这个hash为key去缓存中查找。
查询缓存开启后,对读写操作的影响。
innodb中,如果某个事务对表进行了加锁,那么,在这个事务提交前,所有与这个表相关的缓存都将失效,直到事务提交后,才能继续更新并使用缓存。
mysql查询缓存使用内存的方式,query_cache_min_res_unit参数的设置
在服务器开启时,mysql会根据配置文件向操作系统malloc()一块内存,这块内存的一小部分(大概40KB)的区间将作为维护缓存的一些记录所用,剩下的其他部分将作为真正能用的空间。任何查询想缓存申请空间时,都会首先申请一块query_cache_min_res_unit大小的空间,然后将数据放入,如果空间有剩余,则将剩余空间释放掉,如果不够,则继续向缓存申请一块query_cache_min_res_unit大小的空间,直至满足要求。
查询缓存配置:query_cache_type、query_cache_size、query_cache_min_res_unit、query_cache_limit、query_cache_wlock_invalidate
内存碎片与缓存命中率跟配置的关系
innodb与查询缓存
通用缓存的一些优化方式
8 优化服务器设置
9 操作系统与硬件优化