详解高性能mysql之MySQL高级特性总结

发表于:2019-7-12 10:52

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:波波说运维    来源:今日头条

#
MySQL
分享:
  概述
  闲来无事,看了下高性能mysql这本书,其中的一些MySQL高级特性写的还不错,在这里总结分享下。
  01.分区表
  1、分区表限制
  一张表最多1024个分区
  分区表中无法使用外键约束
  2、分区表注意点
  按行写入大量数据时分区过多会出现问题,所以对大多数系统,100左右个分区是没有问题的
  注:键分区和哈希分区没有此问题
  3、查询优化
  对于访问分区来说,在where中带分区列是很重要的(能过滤部分分区)
 
  注:where中要使用分区函数列本身才能过滤分区,如where time='2017',而where YEAR(time)=2017错误
  02.视图
  1、概念
  虚拟表,不存数据,数据来自其他表
  2、更新视图
  更新列必须来自同一表,且含GROUP BY、UNION、聚合函数及特殊情况不能更新
  3、对性能的影响
  重构数据库时可使用视图而不必修改表结构,用视图创建基于列的权限控制减少额外开销等
  4、视图的限制
  不支持物化视图(即视图在表中不可查看),不支持视图中建索引
  03.外键索引
  InnoDB是mysql目前唯一支持外键索引的内置引擎
  外键成本:外键每次修改数据时都要求在另一张表多执行一次查找,当然外键在相关数据删除和更新上比在应用中维护更高效。
  注:许多案例中发现,在对性能分析时发现外键就是瓶颈所在,删除外键后性能立即大幅提升。
  04.字符集和校对
  
  字符集编码优先级:列>表>数据库
  校对规则:_cs、_ci、_bin分别对应大小写不敏感、大小写敏感、二进制值
  05.全文索引
  mysql不支持中文全文索引,应用其他引擎如 Sphinx等
  06.分布式(XA)事务
  企业在分布式多数据库下仍能保证事务的ACID,这里后面单独介绍。
  07.查询缓存
  概念:缓存select结果,跳过解析、优化、执行阶段。
  查询缓存是完全存储在内存中。mysql无法为每一个查询结果精确分配大小刚好配匹的缓存空间。
 
  查询缓存如何分配内存来存储结果数据
  查询缓存无法命中的原因:包含不确定的函数、未处理过该查询、内存用完被逐出
  配置和维护查询缓存:
  query_cache_type:是否打开查询缓存,设置成ON、OFF、DEMAND(这个仅在明确写明SQL_CACHE下才放入缓存)
  query_cache_size:查询缓存使用的总内存空间(值是1024整数倍)
  query_cache_min_res_unit:查询缓存中分配内存块时的最小单位。
  query_cache_limit:MySQL能缓存的最大查询结果
  query_cache_wlock_invalidate:某表被锁住,是否仍然从查询缓存返回结果,默认OFF
  通用查询缓存优化:
  1) 用多个小表代替一个大表对查询缓存
  2)批量写入时只需要做一次缓存失效
  3)缓存空间太大,服务器可能僵死,办法是控制大小或禁用
  4)用SQL_CACHE、SQL_NO_CACHE控制某个select是否缓存
  5)对于写密集型应用,直接禁用查询缓存更好
  注:若需要更高的缓存效率,推荐使用memcached或redis之类

      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号