0
点赞
收藏
分享

微信扫一扫

《高性能mysql》之MySQL高级特性(第七章)


①分区表:


      -- 分区表限制:


1024个分区


无法使用 外键约束



   -- 分区表注意点:


100左右个分区是没有问题的


注:键分区和哈希分区没有此问题



-- 查询优化:对于访问分区来说,在where中带分区列是很重要的(能过滤部分分区)


               

《高性能mysql》之MySQL高级特性(第七章)_数据库优化


 注:where中要使用分区函数列本身 才能过滤分区,如where time='2017',而where YEAR(time)=2017 错误


               


②视图:


     概念:虚拟表,不存数据,数据来自其他表


     更新视图:更新列必须来自同一表,且含GROUP BY、UNION、聚合函数及特殊情况不能更新


     对性能的影响:重构数据库时可使用视图而不必修改表结构,用视图创建基于列的权限控制减少额外开销等


     视图的限制:不支持物化视图(即视图在表中不可查看),不支持视图中建索引



③外键索引:


支持外键索引的内置引擎


多执行一次查找,当然外键在相关数据删除和更新上比在应用中 维护更高效。


注:许多案例中发现,在对性能分析时发现 外键就是瓶颈所在,删除外键后性能立即大幅提升。




④在mysql内部存储代码:


     存储过程和触发器(可在你执行insert、update、delete时触发)、游标  ---另开文章细说



⑤字符集和校对:


优先级:列>表>数据库


_cs、_ci、_bin分别对应 大小写不敏感、大小写敏感、二进制值



⑥全文索引:


中文全文索引,应用其他引擎如 Sphinx等


     


⑦分布式(XA)事务:


     企业报在分布式多数据库下仍能保证事务的ACID



⑧查询缓存:


-- 概念:缓存select结果,跳过解析、优化、执行阶段。


     查询缓存是完全存储在内存中。mysql无法为每一个查询结果精确分配大小刚好配匹的缓存空间。


     

《高性能mysql》之MySQL高级特性(第七章)_高性能_02


-- 查询缓存无法命中的原因:包含不确定的函数、未处理过该查询、内存用完被逐出


-- 如何判断查询缓存是否有效:     


Qache_hits和Qache_inserts的比值(3:1查询缓存有效,10:1最佳)


     


-- 配置和维护查询缓存:


是否打开查询缓存,设置成ON、OFF、DEMAND(这个仅在明确写明SQL_CACHE下才放入缓存)


总内存空间(值是1024整数倍)


最小单位。


最大查询结果


          query_cache_wlock_invalidate:某表被锁住,是否仍然从查询缓存返回结果,默认OFF


               


FLUSH QUERY CACHE


       


 -- InnoDB和查询缓存:表上有任何的锁,该查询结果无法缓存;sql语句有ON DELETE CASCADE,则相关联查询缓存一起失效


多个小表代替一个大表对查询缓存


批量写入时只需要做一次缓存失效


空间太大,服务器可能僵死,办法是控制大小或禁用


控制某个select是否缓存


写密集型应用,直接禁用查询缓存更好


          


注:若需要更高的缓存效率,推荐使用memcached或redis之类

举报

相关推荐

0 条评论