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 开发总结的更多相关文章

  1. Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试

    Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试一.下载相关安装包 1.下载nginx最新版本(nginx1.3.13版之后才支持websocket协议) 下载地址 ...

  2. 深入理解MySQL开发性能优化.pptx

    深入理解MySQL开发性能优化.pptx,依旧上传baidu pan http://pan.baidu.com/s/1jIwGslS,视频暂未出,培训完成后会更新.

  3. 【MySql】赶集网mysql开发36条军规

    [MySql]赶集网mysql开发36条军规 2012-05-14 14:02:33 分类: Linux   写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒 ...

  4. mysql开发中使用存储过程

    在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的 mysql 执行语句是要先编译,然后再执行的.这样如果查询并发大的时候. ...

  5. [转载] 根据多年经验整理的《互联网MySQL开发规范》

    原文: http://weibo.com/p/2304181380b3f180102vsg5 根据多年经验整理的<互联网MySQL开发规范> 写在前面:无规矩不成方圆.对于刚加入互联网的朋 ...

  6. [转发] 老叶观点:MySQL开发规范之我见

    原文: http://imysql.com/2015/07/23/something-important-about-mysql-design-reference.shtml 老叶观点:MySQL开发 ...

  7. express框架+jade+bootstrap+mysql开发用户注册登录项目

    完整的项目代码(github):https://github.com/suqinhui/express-demo express是基于Node.js平台的web应用开发框架,用express框架开发w ...

  8. MySQL开发指南

    数据库开发是数据库管理系统(DBMS)和数据库应用软件设计研发的总称,数据运维.参与数据库生产环境的问题优化和解决等方面的事宜. 1.关于MySQL数据库 2.搭建MySQL环境 3.入门常用SQL. ...

  9. 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)

    Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...

  10. mysql 开发进阶篇系列 55 权限与安全(安全事项 )

    一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...

随机推荐

  1. [UE4]VR成像原理

    一.双眼成像原理 二.3D电影成像原理 模拟人眼.用2个摄像机拍摄,模拟人的左眼和右眼 播放的时候2个投影仪分别同时播放左右摄像机拍摄到内容,观众带上3D眼镜,左眼只能看到左摄像机的内容(过滤右摄像机 ...

  2. window 10 专业版激活|win 10专业版激活码

    下面讲解Windows 10专业版(windows 10 profession version)使用激活码激活 鼠标移至屏幕最左下处右击点击 Windows PowerShell(管理员) 在wind ...

  3. css3兼容性检测工具

    1.   Modernizr  会在Modernizr 会在页面加载后立即检测特性:然后创建一个包含检测结果的 JavaScript 对象,同时在 html 元素加入方便你调整 CSS 的 class ...

  4. vue里面axios使用post

    let params = new URLSearchParams(); params.append('action', "login"); params.append('user' ...

  5. ARM 版本

    M  microcontroller 单片机 STM32                                M0 M0+   M3  M4  M7低功耗 A applicatioin 应用 ...

  6. windows下wmic命令

    转载 https://www.cnblogs.com/archoncap/p/5400769.html 第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符.在 ...

  7. Win10系统进行远程桌面连接出现身份验证错误怎么办

    在win10系统中,自带有远程桌面连接功能,但是有时候会遇到一些问题,比如有不少用户反映说在进行远程桌面连接的时候,出现身份验证错误的情况,导致远程连接失败,接下来给大家分享一下Win10系统进行远程 ...

  8. (转)SQL SERVER 生成建表脚本

    https://www.cnblogs.com/champaign/p/3492510.html /****** Object: StoredProcedure [dbo].[GET_TableScr ...

  9. C++ 设置光标问题

    一.隐藏光标 1.引入头文件window.h 2.  定义光标信息结构体变量 CONSOLE_CURSOR_INFO  cursor info={1,0}; typedef struct _CONSO ...

  10. cdnbest里如何查看网站是否被缓存

    比如开启了强制缓存,如何查看缓存是否生效 本例以firefox浏览器查看,先打开浏览器,按下F12, 然后在浏览器是输入网址访问 如下图响应头里的 x-cache显示 Miss  from 就是没有缓 ...