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. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ... 
随机推荐
- 基于keras的fasttext短文本分类
			### train_model.py ### #!/usr/bin/env python # coding=utf-8 import codecs import simplejson as json ... 
- Linux上启动Cron任务
			cron是一个Linux下的定时执行工具,无需人工干预,与quartz上的cron表达式稍有不同.由于cron是Linux上的内置基础服务,并不是所有服务器都是默认启动该服务的,如果没有启动可以使用下 ... 
- 20165312 2017-2018-2 《JAVA程序设计》第5周学习总结
			20165312 2017-2018-2 <JAVA程序设计>第5周学习总结 一.本周学习内容总结 总的来说,本周学习较吃力,在理解第十章的代码时速度较慢. 内部类 内部类是定义在一个类中 ... 
- Js将数字转化为中文大写
			function number_chinese(str) { var num = parseFloat(str); var strOutput = "", strUnit = '仟 ... 
- Java选择排序,插入排序,快速排序
			public class Test { public static void main(String[] args) { int a[] = { 1, 2, 3, 4, 5 }; 选择排序(a); ... 
- Keil中 Program Size: Code RO-data RW-data ZI-data
			一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘. 现在我们就一个STM32的工程为例子 linking... Program Size: ... 
- ios黑科技
			1.brew brew 是 Mac 下的一个包管理工具,类似于 centos 下的 yum,可以很方便地进行安装/卸载/更新各种软件包,例如:nodejs, mysql等,可以用来快速搭建各种本地环境 ... 
- 一个类似于jq的小型库
			本人写了一个类似于jq的小型库,不过只是写了部分方法而已.并没有jq那么全面,下面就介绍下有哪些方法可以使用 第一个是选择器, 选择器比较简单 只支持ID选择器 $(‘#id_name’) Class ... 
- 工程C++基础
			大家好,我是老A.今天我们要学习的是工程C++,这是一个不可描述的东西.我主要讲的是template. template的用处是装逼,所以很重要. C++配备了函数模板和类模板.函数模板就是我们平时的 ... 
- 关于IE 浏览器的position居中定位的问题和 行块元素的设置问题
			这两天在写页面时,遇到一些IE浏览器显示不正常的问题,主要有两个: 1. 在td 中设置span 元素水平垂直居中,在谷歌浏览器中可以正常显示,但是在IE 中却无法显示出想要的结果,即不能实现垂直水平 ... 
