MySQL数据库开发常见问题及优化
广州为学教育科技有限公司 2019-01-21 16:16 330次浏览
MySQL数据库是被广泛应用的关系型数据库,其体积小、支持多处理器、开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高。在使用 MySQL的过程中不规范的 SQL 编写、非的策略选择都可能导致系统性能甚至功能上的缺陷。
恰巧就在前几天,本人所在公司的云事业部举办了一场关于 MySQL的技术交流会,其中一个 part 正是聚焦于开发过程中 MySQL数据库设计及使用的常见问题,并提出相关优化方案。根据会议内容并查阅相关资料,本人对这个 part 进行了一次小结,结合自己的工作经历及理解形成此文以供分享,希望能有助于各位同行解决工作中的相关问题。
本文将就以下三个问题进行展开:
1、库表设计
2、慢 SQL 问题
3、误操作、程序 bug 时怎么办
一、库表设计
1.1 引擎选择
在 mysql 5.1 中,引入了新的插件式存储引擎体系结构,允许将存储引擎加载到正在运新的 mysql 服务器中。使用 mysql 插件式存储引擎体系结构,允许数据库专业人员或者设计库表的软件开发人员为特定的应用需求选择专门的存储引擎,完全不需要管理任何特殊的应用编码要求,也无需考虑所有的底层实施细节。因此,尽管不同的存储引擎具有不同的能力,应用程序是与之分离的。此外,使用者可以在服务器、数据库和表格三个层级中存储引擎,提供了极大的灵活性。
mysql 常用的存储引擎包括 MYISAM、Innodb 和 Memory,其中各自的特点如下:
1、MYISAM : 全表锁,拥有较高的执行速度,一个写请求请阻塞另外相同表格的所有读写请求,并发性能差,占用空间相对较小,mysql 5.5 及以下仅 MYISAM 支持全文索引,不支持事务。
2、Innodb:行级锁(SQL 都走索引查询),并发能力相对强,占用空间是 MYISAM 的 2.5 倍,不支持全文索引(5.6 开始支持),支持事务。
3、Memory : 全表锁,存储在内存当中,速度快,但会占用和数据量成正比的内存空间且数据在 mysql 重启时会丢失。
基于以上特性,建议绝大部份都设置为 innodb 引擎,特殊的业务再考虑选用 MYISAM 或 Memory ,如全文索引支持或的执行效率等。
1.2 分表方法
在数据库表使用过程中,为了减小数据库服务器的负担、缩短查询时间,常常会考虑做分表设计。分表分两种,一种是纵向分表(将本来可以在同一个表的内容,人为划分存储在为多个不同结构的表)和横向分表(把大的表结构,横向切割为同样结构的不同表)。
其中,纵向分表常见的方式有根据活跃度分表、根据重要性分表等。其主要解决问题如下:
1、表与表之间资源争用问题;
2、锁争用机率小;
3、实现核心与非核心的分级存储,如UDB登陆库拆分成一级二级三级库;
4、解决了数据库同步压力问题。
横向分表是指根据某些特定的规则来划分大数据量表,如根据时间分表。其主要解决问题如下:
1、单表过大造成的性能问题;
2、单表过大造成的单服务器空间问题。
1.3 索引问题
索引是对数据库表中一个或多个列的值进行排序的结构,建立索引有助于更快地获取信息。 mysql 有四种不同的索引类型:
1、主键索此 ( PRIMARY )
2、索引 ( UNIQUE )
3、普通索引 ( INDEX )
4、全文索引(FULLTEXT , MYISAM 及 mysql 5.6 以上的 Innodb )
建立索引的目的是加快对表中记录的查找或排序,索引也并非越多越好,因为创建索引是要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间维护索引。
广州为学教育科技有限公司位于广州市天河区,紧临广东省重点软件园区--广州天河华景软件园,成立于2008年3月,注册资金300万元,目前有一个中心两个基地,共占地4000平方米,是一家专注于计算机人才培养、计算机人才外包的一家软件产品研发和人才服务机构。
疯狂软件、疯狂Java是广州为学教育科技有限公司的品牌。
1、自主研发国内的Java培训教材
广州为学教育科技有限公司相继出版《疯狂JAVA讲义》、《轻量级JavaEE企业应用实战》、《疯狂Android讲义》、《疯狂XML讲义》、《经典JavaEE企业应用实战》、《疯狂iOS讲义》、《疯狂Ajax讲义》、《疯狂Java突破程序员基本功的16课》、《疯狂[html]5/CSS3/Java[script]讲义》、《Spring+MyBatis企业应用实战》等著作。其中疯狂软件体系图书得到广泛的市场认同,并多次重印的畅销图书,并被多家高校选作教材,部分图书如《瘋狂JAVA成為程設高手的16堂課》已被翻译成繁体中文版、输出到台湾地区。
2、IT实践教育的“黄埔军校”
广州为学教育科技有限公司紧扣IT前沿技术的脉搏,高瞻远瞩立于潮头,引领,开创IT教育培训的新天地,被称为新式IT教育的“黄埔军校”。疯狂软件教育中心教育中心主要面对大学生和准大学生的长期就业培训、企业员工定制内训、在职工程师的短期高端培训以及企业级应用的产品研发,其专业服务和质量承诺在客户中赢得广泛的声誉。为保服务的质量,基地与广东水利电力职业技术学院、清远职业技术学院、南华工商学院、广东科贸职业学院、东华职业学院、广州大学华软软件学院、广东省经济贸易职业技术学校、广东创新科技职业学院、广州华南商贸职业学院、广州南洋理工职业技术学院、华南农业大学、仲恺农业工程学院、广东工业大学、佛山科技学院、南方医科大学、广西财经学院等几十所高等学府建立了师资力量方面的合作关系,同时与中国电信、中国移动、中国邮政、新华南方、汇丰银行等知名企业建立了广泛的战略合作伙伴关系。
3、教育部产学合作协同育人项目合作单位
2017年广州为学教育科技有限公司获批教育部产学合作协同育人项目合作单位。参与人才培养模式改革、课程改革、教学方法改革、教材建设、配套设施建设、教师培训等开展的项目。
广州为学教育科技有限公司支持的《移动应用开发在线课程建设》获得教学内容和课程体系改革立项、《信息管理与信息系统专业师资培训》获得师资培训立项、《移动应用开发师资培训》获得师资培训立项、《高校计算机专业高端应用型师资培训建设》获得师资培训立项、《移动应用开发校外实践基地建设》获得校外实践基地建设立项、《信息管理与信息系统专业校外实践基地建设》获得校外实践基地建设立项、《高校计算机专业高端应用型校外实践基地建设》获得校外实践基地建设立项。
4、自主知识产权核心技术企业
公司拥有多项由国家版权局颁发的计算机软件著作权登记证书,如《为学教育培训课程微信报名平台》、《为学教育云数据库系统》、《为学教职工ERP管理系统》、《为学网络教室授课系统》、《为学微教室微信互动系统》、《为学学员档案管理系统》等等。
5、高新技术企业
公司自主研发的《新型智能网络多媒体教育培训系统》、《交互式技术培训服务系统》等多项产品被获广东省高新技术企业协会认定为广东省高新技术产品。
我公司顺利通过广东省科学技术厅、广东省财政厅、广东省国家税务局和广东省地方税务局等四部门的联合评审验收,被认定为“高新技术企业”。 这是我公司坚持以科技为先导,以创新为动力所取得的一项重大发展成果。该项成果的取得,不仅是我公司长期坚持技术创新的有力诠释,同时也代表着我公司具备了自主创新的科技研发实力。
6、猎头服务和助力大学生就业创业
公司业务范围已扩展到IT综合技能培训、职业技能测评、人才服务、人才派遣、高校委培教师和IT项目外包等多项 IT 人才服务领域。目前合作的企业有700多家,这使得基地拥有单纯培训机构所不可能具备的广泛的大型IT企业人才需求资源,作为高校毕业生和大型企业之间人才培养及招聘的桥梁,基地的学员在毕业后将面向全国享受完善的就业推荐服务,并同时获取享受终生猎头服务的资格。
公司作为软件开发、游戏开发人才输送渠道,承担着为本土企业进行解决技术人才的职能,提供整合外包人才的方案;同时扶持自主创业;建立大学生实训工厂及研发中心。
公司网址: www.fkjava.org
公司总部地址:广州市天河区车陂大岗路4号沣宏大厦三楼
联系:黄老师
手机:13288494988