mysql优化理解笔记(持续更新)
主要包括存储引擎、索引、sql语句
一、存储引擎
目前最常见的是InnoDB和MyISAM两个存储引擎
(1)InnoDB:支持事务处理,提供行级锁、外键约束索引,行锁
(2)MyISAM:支持全文搜索,表锁
对于经常需要增删改操作的表建议使用InnoDB,因为有事务处理(要么成功要么失败回滚),而需要大量查询操作的表建议用MyISAM
二、索引
索引可以大大提高MySQL的检索速度
(1)普通索引:由关键字KEY或INDEX定义的索引,唯一任务就是加快访问速率
(2)唯一索引:索引列的值必须唯一,但允许有空值,每个表可以有多个唯一索引,唯一索引不可以被其他表引用为外键
(3)主键:主键索引是唯一索引的特定类型,它要求主键中的每个值都唯一,并且不能为空,每个表只能有一个主键,可以被其他表引用为外键
但是索引并不是越多越好,可能加快了select但又减慢了update和insert
(1)维护重建索引要耗费时间,这种时间会随着数据量的增加而增加
(2)索引需要占物理空间
(3)对表的数据进行增删改时,索引需要动态的维护,这样就降低了数据的维护速度
对于常用where及 order by 的列可以添加索引加快查询速率
三、sql语句
(1)select时,不要用*,而是写需要获取的字段名,避免获取多余的数据浪费资源
(2)select时,避免在 where 子句中使用 or 来连接条件,可以用union。select id from player where status=1 union select id from player where status=2;
(3)尽量使用union all替代union,因为当结果集很大的时候,还要去移除重复的记录会很浪费资源,如果需要数据唯一的话,可以添加唯一索引
(4)尽量使用inner join替代left join,因为inner join的效率更高,它只需选出能匹配的记录,不需要返回左表不能匹配的项
(4)select时,where子句对表字段避免用对null值判断,尽量设置字段默认值为 0或其他
(5)用exist和not exist 替换in和not in
(6)避免在where查询时进行表达式操作
(7)使用join代替子查询
(8)可以使用explain分析sql执行效率
(9)可以查看慢查询日志,查看哪些sql比较慢,对应进行修改,
用set profiling=1;设置慢查询日志开启,
用show profiles;查看慢查询日志内容,
用show profile for query id值;查看具体的花费时间
mysql优化理解笔记(持续更新)的更多相关文章
- MySQL优化技巧【持续更新】
前言 应用程序或web网页有时慢的像蜗牛爬似的,可能是网络原因,可能是系统架构原因,还有可能是数据库原因.那么如何提高数据库SQL语句执行速度呢?下面是积累的一些优化技巧,望对君有用. 正文 1.比较 ...
- BLE资料应用笔记 -- 持续更新
BLE资料应用笔记 -- 持续更新 BLE 应用笔记 小书匠 简而言之,蓝牙无处不在,易于使用,低耗能和低使用成本.'让我们'更深入地探索这些方面吧. 蓝牙无处不在-,您可以在几乎每一台电话.笔记本电 ...
- Mysql注入小tips --持续更新中
学习Web安全好几年了,接触最多的是Sql注入,一直最不熟悉的也是Sql注入.OWASP中,Sql注入危害绝对是Top1.花了一点时间研究了下Mysql类型的注入. 文章中的tips将会持续更新,先说 ...
- [读书]10g/11g编程艺术深入体现结构学习笔记(持续更新...)
持续更新...) 第8章 1.在过程性循环中提交更新容易产生ora-01555:snapshot too old错误.P257 (这种情况我觉得应该是在高并发的情况下才会产生) 假设的一个场景是系统一 ...
- react-native-storage 使用笔记 持续更新
React-native-storage是在AsyncStorage之上封装的一个缓存操作插件库,刚开始接触这个也遇到了一些问题,在这里简单记录总结一下,碰到了就记下来,持续更新吧 1.安卓下stor ...
- mysql日常笔记(持续更新)
常用场景 sql_mode问题:http://blog.csdn.net/ccccalculator/article/details/70432123 连续日期补全/数据补零操作 在不使用存储过程和函 ...
- Mysql操作笔记(持续更新)
1.mysqldump备份导出 备份成sql mysqldump -hlocalIp -uuserName -p --opt --default-character-set=utf8 --hex-bl ...
- Effective Java通俗理解(持续更新)
这篇博客是Java经典书籍<Effective Java(第二版)>的读书笔记,此书共有78条关于编写高质量Java代码的建议,我会试着逐一对其进行更为通俗易懂地讲解,故此篇博客的更新大约 ...
- mysql 函数编程大全(持续更新)
insert ignore insert ignore表示,如果中已经存在相同的记录,则忽略当前新数据 如果您使用一个例如“SET col_name = col_name + 1”的赋值,则对位于右侧 ...
随机推荐
- JDBC(2)Statement
Statement: 用于执行SQL语句的对象 通过Connection的createStatement()方法得到一个Statement对象 只有在获得了Statement对象之后才能执行SQL对象 ...
- 使用@SuppressWarnings("unchecked")消除非受检警告
使用泛型编程时,会遇到许多编译器警告,如:非受检强制转化警告,非受检方法调用警告,非受检普通数组创建警告,费受精转换警告.这次的内容就是遇到这些警告的时候你该怎么办 PS:非受检警告就是代码上黄色的感 ...
- js 实现图片无限横向滚动效果
门户网站好多都有产品无线滚动展现的效果: 测试demo1 -- 非无缝滚动(可以看出来从头开始的效果): css样式如下: .box{ width: 1000px; border: 1px solid ...
- 过滤xss攻击脚本
<?php /** * @blog http://www.phpddt.com * @param $string * @param $low 安全别级低 */ function clean_xs ...
- JAVA正则表达式判断元音
/* * 判断字符串”qaq”中间的字符是否是元音 * * aeiou * AEIOU * */ (1)正则表达式 (2) (3)
- GoBelieve-国内唯一开源IM服务
GoBelieve-国内唯一开源IM服务 1. 一小时接入 专注IM,无冗余功能 几行代码,一小时接入 省时省力. 2. 自由定制 提供最新源码, 自行二次开发,业务协议 交互视觉均可根据业务需求 自 ...
- Eclipse新导入的项目中ctrl+点击指定方法名或类名没有反应,不能跳转问题
项目没有转成java项目 解决方法:右击项目名---选择properties----点击Project Facets,这样就可以实现ctrl+左键点击跳转了. 转成java项目后会报错 解决办法:选中 ...
- Linux中文件I/O函数
一.lseek函数 每个打开文件都有一个与其相关联的“当前文件偏移量”.它通常是一个非负整数,用以度量从文件开始处 计算的字节数.通常,读.写操作都从当前文件偏移量处开始,并使偏移量增加所读写的字节数 ...
- 19-3-4 Python进制转换;bool str int三者之间的转换;字符串的索引,切片;for循环的使用
进制转换: 二进制转十进制: 0010 1111 = 1*2**0+1*2**1+1*2**2+1*2**3+1*2**5 十进制转换二进制: 用十进制数除2逆序取余 --->101010 布 ...
- CentOS7.5二进制安装MySQL-5.6.40
安装依赖 yum install -y gcc gcc-c++ automake autoconf yum -y install cmake bison-devel ncurses-devel lib ...