MySQL数据库开发常见问题及优化续
广州为学教育科技有限公司 2019-01-21 16:22 341次浏览
在设计表或索引时,常出现以下几个问题:
1、少建索引或不建索引。这个问题最突出,建议建表时 DBA 可以一起协助把关。
2、索引滥用。滥用索引将导致写请求变慢,拖慢整体数据库的响应速度(5.5 以下的 mysql 只能用到一个索引)。
3、从不考虑联合索引。实际上联合索引的效率往往要比单列索引的效率更高。
4、非列选择。低选择性的字段不适合建单列索引,如 status 类型的字段。
二、慢 SQL 问题
2.1 导致慢 SQL 的原因
在遇到慢 SQL 情况时,不能简单的把原因归结为 SQL 编写问题(虽然这是最常见的因素),实际上导致慢 SQL 有很多因素,甚至包括硬件和 mysql 本身的 bug。根据出现的概率从大到小,罗列如下:
1、SQL编写问题
2、锁
3、业务实例相互干绕对 IO/CPU 资源争用
4、服务器硬件
5、MYSQL BUG
2.2 由 SQL 编写导致的慢 SQL 优化
针对SQL编写导致的慢 SQL,优化起来还是相对比较方便的。正如上一节提到的正确的使用索引能加快查询速度,那么我们在编写 SQL 时就需要注意与索引相关的规则:
1、字段类型转换导致不用索引,如字符串类型的不用引号,数字类型的用引号等,这有可能会用不到索引导致全表扫描;
2、mysql 不支持函数转换,所以字段前面不能加函数,否则这将用不到索引;
3、不要在字段前面加减运算;
4、字符串比较长的可以考虑索引一部份减少索引文件大小,提高写入效率;
5、like % 在前面用不到索引;
6、根据联合索引的第二个及以后的字段单独查询用不到索引;
7、不要使用 select *;
8、排序请尽量使用升序 ;
9、or 的查询尽量用 union 代替 (Innodb);
10、复合索引高选择性的字段排在前面;
11、order by / group by 字段包括在索引当中减少排序,效率会更高。
除了上述索引使用规则外,SQL 编写时还需要特别注意一下几点:
1、尽量规避大事务的 SQL,大事务的 SQL 会影响数据库的并发性能及主从同步;
2、分页语句 limit 的问题;
3、删除表所有记录请用 truncate,不要用 delete;
4、不让 mysql 干多余的事情,如计算;
5、输写 SQL 带字段,以防止后面表变更带来的问题,性能也是比较优的 ( 涉及到数据字典解析,请自行查询资料);
6、在 Innodb上用 select count(*),因为 Innodb 会存储统计信息;
7、慎用 Oder by rand()。
三、分析诊断工具
在日常开发工作中,我们可以做一些工作达到预防慢 SQL 问题,比如在上线前预先用诊断工具对 SQL 进行分析。常用的工具有:
1、mysqldumpslow
2、mysql profile
3、mysql explain
具体使用及分析方法在此就不赘述,网上有丰富的资源可以参考。
四、误操作、程序 bug 时怎么办
提出这个问题显然主要是针对刚开始工作的年轻同行们……实际上误操作和程序 bug 导致数据误删或者混乱的问题并非少见,但是刚入行的开发工作者会比较紧张。一个成熟的企业往往会有完善的数据管理规范和较丰富的数据恢复方案(初创公司除外),会进行数据备份和数据容灾。当你发现误操作或程序 bug 导致线上数据被误删或误改动时,一定不能慌乱,应及时与 DBA 联系,时间进行数据恢复(严重时直接停止服务),尽可能减少影响和损失。对于重要数据(如资金)的操作,在开发时一定要反复进行测试,确保没有问题后再上线。
广州为学教育科技有限公司位于广州市天河区,紧临广东省重点软件园区--广州天河华景软件园,成立于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