专栏名称: java一日一条
主要是讲解编程语言java,并且每天都推送一条关于java编程语言的信息
目录
相关文章推荐
Java编程精选  ·  330个“假补丁”差点混入主线?LinusT ... ·  12 小时前  
芋道源码  ·  告别if else!这款轻量级规则引擎框架,真香! ·  8 小时前  
芋道源码  ·  Spring-Security ... ·  8 小时前  
Java编程精选  ·  Controller层代码这么写,简洁又优雅! ·  昨天  
芋道源码  ·  如何实现一个合格的分布式锁 ·  昨天  
51好读  ›  专栏  ›  java一日一条

mysql数据库开发常见问题及优化

java一日一条  · 公众号  · Java  · 2018-05-30 08:20

正文

请到「今天看啥」查看全文


在 mysql 5.1 中,引入了新的插件式存储引擎体系结构,允许将存储引擎加载到正在运新的 mysql 服务器中。使用 mysql 插件式存储引擎体系结构,允许数据库专业人员或者设计库表的软件开发人员为特定的应用需求选择专门的存储引擎,完全不需要管理任何特殊的应用编码要求,也无需考虑所有的底层实施细节。


因此,尽管不同的存储引擎具有不同的能力,应用程序是与之分离的。此外,使用者可以在服务器、数据库和表格三个层级中存储引擎,提供了极大的灵活性。


mysql 常用的存储引擎包括 MYISAM、Innodb 和 Memory,其中各自的特点如下:


  • MYISAM : 全表锁,拥有较高的执行速度,一个写请求请阻塞另外相同表格的所有读写请求,并发性能差,占用空间相对较小,mysql 5.5 及以下仅 MYISAM 支持全文索引,不支持事务。

  • Innodb: 行级锁(SQL 都走索引查询),并发能力相对强,占用空间是 MYISAM 的 2.5 倍,不支持全文索引(5.6 开始支持),支持事务。

  • Memory : 全表锁,存储在内存当中,速度快,但会占用和数据量成正比的内存空间且数据在 mysql 重启时会丢失。


基于以上特性,建议绝大部份都设置为 innodb 引擎,特殊的业务再考虑选用 MYISAM 或 Memory ,如全文索引支持或极高的执行效率等。


1.2 分表方法

在数据库表使用过程中,为了减小数据库服务器的负担、缩短查询时间,常常会考虑做分表设计。分表分两种,一种是纵向分表(将本来可以在同一个表的内容,人为划分存储在为多个不同结构的表)和横向分表(把大的表结构,横向切割为同样结构的不同表)。


其中,纵向分表常见的方式有根据活跃度分表、根据重要性分表等。其主要解决问题如下:

  • 表与表之间资源争用问题;

  • 锁争用机率小;

  • 实现核心与非核心的分级存储,如UDB登陆库拆分成一级二级三级库;

  • 解决了数据库同步压力问题。







请到「今天看啥」查看全文