MYSQL 开发总结
1、mysql中,VARCHAR(N)中的N代表的是字符数,而不是字节数。例如VARCHAR(255)表示可以保存255的中文
2、过大的长度会消耗更多的内存。VARCHAR(N),存储时是按照数据实际长度存储的。当把数据读入到内存时,为了提高效率,是按照N的长度分配内存的。
3、尽可能将所有列定义为NOT NULL。
a、索引NULL列,需要额外的空间来保存,所以要占用更多的空间。
b、进行比较和运算时要对NULL值做特别的处理,同时可能导致索引失效。
4、避免数据类型的隐式转换。隐式转换会导致索引失效。
例如select * from tablea where id = '123',这里id其实是整数类型的,这就出现了隐式转换
5、充分利用表上已经存在的索引
a、避免使用双%号或前置%的查询条件。如a like '%123%'或a like '%123',这些可能无法使用索引。
b、一个SQL只能利用到复合索引中的一列进行范围查询
例如联合索引(a,b,c) ,如果对a的都是范围查询的话,那么对于b和c的索引是用不到的。这时,应该把a类放在最右侧,即(b,c,a)
c、使用left join或not exists来优化not in操作。not in通常会使索引失效
d、在mysql优化生成执行计划时,会比较各个索引的效率,进而生成最终的执行计划。过多的索引,会导致这个过程变慢,进而体现在sql的执行时间上
6、禁止使用不含字段列表的INSERT语句,例如INSERT INTO T VALUES(A,B,C),这样表结构变化可能会导致兼容异常。应该为INSERT INTO T(c1,c2,c3) VALUES(A,B,C)
7、避免使用子查询,可以把子查询优化为join操作。
a、子查询的结果集无法使用索引
b、子查询会产生历史表的操作(子查询结果一般会保存在临时表中,无论是内存临时表或是数据库临时表,他们不会使用到索引),如果子查询数据量大则严重影响效率
c、因为子查询会查询临时表,且不使用索引,所以数据量大时,会消耗过多的CPU及IO资源
8、避免使用JOIN关联太多的表
a、每join一个表会多占一部分内存(join_buffer_size)
b、会产生临时表操作,影响查询效率
c、MySQL最多允许关联61个表,建议不超过5个
9、减少同数据库的交互次数
a、数据库更适合处理批量操作
b、合并多个相同的操作到一起,可以提高处理效率
10、对于同一列,使用in代替or,in内的数据最好不超过500个。个人经过explain执行计划,似乎没有发现这条规律。
11、WHERE从句中禁止对列进行函数抓换和计算,否则会导致无法使用索引。
例如where date(createtime) = '20160901',无法使用索引。
12、在明显不会有重复值时使用union all而不是union。
a、union会把所有数据放在临时表中后再进行去重操作
b、union all不会再对结果集进行去重操作
MYSQL 开发总结的更多相关文章
- Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试
Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试一.下载相关安装包 1.下载nginx最新版本(nginx1.3.13版之后才支持websocket协议) 下载地址 ...
- 深入理解MySQL开发性能优化.pptx
深入理解MySQL开发性能优化.pptx,依旧上传baidu pan http://pan.baidu.com/s/1jIwGslS,视频暂未出,培训完成后会更新.
- 【MySql】赶集网mysql开发36条军规
[MySql]赶集网mysql开发36条军规 2012-05-14 14:02:33 分类: Linux 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒 ...
- mysql开发中使用存储过程
在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的 mysql 执行语句是要先编译,然后再执行的.这样如果查询并发大的时候. ...
- [转载] 根据多年经验整理的《互联网MySQL开发规范》
原文: http://weibo.com/p/2304181380b3f180102vsg5 根据多年经验整理的<互联网MySQL开发规范> 写在前面:无规矩不成方圆.对于刚加入互联网的朋 ...
- [转发] 老叶观点:MySQL开发规范之我见
原文: http://imysql.com/2015/07/23/something-important-about-mysql-design-reference.shtml 老叶观点:MySQL开发 ...
- express框架+jade+bootstrap+mysql开发用户注册登录项目
完整的项目代码(github):https://github.com/suqinhui/express-demo express是基于Node.js平台的web应用开发框架,用express框架开发w ...
- MySQL开发指南
数据库开发是数据库管理系统(DBMS)和数据库应用软件设计研发的总称,数据运维.参与数据库生产环境的问题优化和解决等方面的事宜. 1.关于MySQL数据库 2.搭建MySQL环境 3.入门常用SQL. ...
- 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)
Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...
- mysql 开发进阶篇系列 55 权限与安全(安全事项 )
一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...
随机推荐
- 竖直的ViewPager,上下滑动的ViewPager,VerticalViewPager ;
直接看代码吧,重写Viewpager,改变了手势和切换效果:和正常的Viewpager使用一模一样: /** * ChenboCui 竖向的Viewpager */ public class Vert ...
- MSB8013
解决方案: 去掉勾选
- JVM内容梳理
- JS调试技巧
大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢Chrome的,因为它对于调试脚本及前端设计调试都有它比其它浏览器有过之而无不及的地方.可能大家对co ...
- vs2017 本地IP地址调试 局域网调试
在项目sln目录下有一个隐藏文件夹.vs\config\applicationhost.config <bindings> <binding protocol="http& ...
- Django之路由系统 Dj
Django之路由系统 Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调 ...
- JavaScript学习-3——数组、函数、递归
本章目录 -----------①数组 -----------②函数 -----------③递归 一.数组 弱类型:任何类型数据,且没有强度限制: 强类型:同一类型的数据存储的集合(内存中连续存储) ...
- 总结http状态码和200,304状态码
状态码 响应类别 中文意思 1XX 信息性状态码(Informational) 服务器正在处理请求 2XX 成功状态码(Success) 请求已正常处理完毕 3XX 重定向状态码(Redirec ...
- linux下用python搭建简单的httpServer
1.服务器端:python -m SimpleHTTPServer 12000 python -m : 相当于import,当做模块来启动; 后面的12000代表的是端口 使用浏览器打开如下: 2. ...
- typedef typename
所以根据上述两条分析, typedef typename RefBase::weakref_type weakref_type; 语句的真是面目是: typedef创建了存在类型的别名,而typen ...