关系型数据库---MYSQL---优化
1、为什么要进行SQL优化?
1.1 查询性能低
1.2 执行时间过长
1.3 等待时间过长
1.4 SQL写的太差(尤其是多表关联查询)
1.5 索引失效
1.6 服务器参数(缓存、线程数)设置不合理
1.7 项目需求不合理
......
程序员关注的主要是SQL、索引
2、MySQL执行过程
2.1 前言:
MySQL服务器在接收到客户端发来的SQL语句,是不能够马上执行该SQL语句;
该SQL需要进行一系列复杂的过程,最终转变为二进制的机器码,才能被执行;
2.2 SQL执行流程
2.3 SQL执行顺序
2.4 SQL优化的目标
主要是对索引的有效使用
3、数据库索引
3.1
3.2 案例
索引的目的:减少磁盘的IO次数,从而提升性能;
【扩展】:
一个3层的B+树的数据结构,可以容纳上百万条数据,查询某个数据,只需要3次IO,效率极高;
3.3 索引的利弊
利:
减少IO次数,提高查询效率;
降低CPU的使用率;
弊:
占用磁盘的存储空间(索引本身也是文件);
不适用索引的情况:
数据量小的表;
频繁变动的字段;
不经常查询的字段;
对增删改操作效率降低(需要重新维护索引);
【备注】:
查询优化器 会对 使用索引、不使用索引 进行比对,如果发现不使用效率更高,则不会使用索引(索引的使用与否 由 查询优化器 决定);
3.4 索引的分类
同一张表 可以有 多个不同的索引;
3.4.1 主键索引
3.4.2 单列索引
单独对表中的某个列做索引(根据需求);
3.4.3 唯一索引
该列数据中没有重复数据,都是唯一的;
3.4.4 复合索引
项目中使用最多的;
实际需求中 往往是按照多个条件进行查询,而mysql在查询时只会选择其中一个做索引(最优的 执行计划);
复合索引的规则比较严格;
3.5 SQL执行计划
3.5.1 前言
SQL语句执行之前,SQL优化器 会对 SQL语句 进行优化和调整,最后生成最优的SQL执行计划;
最终执行的SQL不一定是我们当初编写的SQL;
3.5.2 查看SQL执行计划
explain SQL语句;
3.5.3 执行计划详解
id:SQL执行的序列号
如果有多个,数字大的优先执行;如果相同,依次执行;
select_type:查询的类型
table:数据来自哪张表;
type:显示 连接使用哪种类别、有无使用索引(explain工具分析最重要的);
possible_keys:可以使用的索引;
key:SQL执行时真正用到的索引;
key_len:mysql决定使用的键长度
长度越短越好;
ref:参数类型;
rows:要达到结果,必须搜索多少行数据;
Extra:mysql解决问题的详细信息(关键参考项之一);
4、SQL优化
4.1 适当使用索引
4.1.1 建索引的原则:
a,频繁作为查询条件的字段建索引,eg:关联查询的外键...
b,唯一性差 的字段,不适合 单独创建索引;
c,更新频繁的字段,不合适建索引;
d,不会出现在where语句中的字段,不适合建索引;
4.1.2 join的原则:
a,不要使用inner join ,原因是SQL执行顺序;
b,数据量小的表写在join左边,数据量大的写在join的右边;
mysql中的join使用Nested Loop join来实现(循环嵌套):
数据量小的为外层循环、数据量大的为内层循环,最后合并结果;
c,优先优化内层循环;
d,保证join语句中 被作为连接条件的字段已经建立了索引;
e,扩大缓冲区的大小,容纳更多的查询数据(BDA的职责);
4.1.3 避免索引失效:
关系型数据库---MYSQL---优化的更多相关文章
- Hadoop生态组件Hive,Sqoop安装及Sqoop从HDFS/hive抽取数据到关系型数据库Mysql
一般Hive依赖关系型数据库Mysql,故先安装Mysql $: yum install mysql-server mysql-client [yum安装] $: /etc/init.d/mysqld ...
- MongoDB 与传统关系型数据库mysql比较
与关系型数据库相比,MongoDB的优点: 转载自 http://blog.sina.com.cn/s/blog_966e430001019s8v.html①弱一致性(最终一致),更能保证用户的访问 ...
- 关系型数据库MySQL多实例
简介 MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司.在2008年1月16号被Sun公司收购后Sun公司又被oracle公司收购.目前MySQL被广泛地应用在I ...
- 关系型数据库MySql简介
什么是关系型数据库? 数据库就是用来存储数据的仓库,是一种特殊的文件. 根据存储的数据不同,划分为关系型数据库和非关系型数据库. 关系型数据库就是指 建立在关系模型基础上的数据库,通俗来讲这种数据库就 ...
- 数据库 mysql 优化器原理
MySQL查询优化器有几个目标,但是其中最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数据行. 你的最终目标是提交SELECT语句查找数据行,而不是排除数据行.优化器试图排除数据 ...
- Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)
1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...
- Python3爬虫(九) 数据存储之关系型数据库MySQL
Infi-chu: http://www.cnblogs.com/Infi-chu/ 关系型数据库关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以关系型数据库的存储方式就是行列 ...
- sqlyog管理关系型数据库mysql数据库之sqlyog的安装管理
.关系型数据库 有库有表,有关系 非关系型数据库 存储对象.集 下面的所有演示截图都是基不超过SQLyog 11进行的. 1. 2.点击上图中的应用程序,进行安装. 安装sqlyog , 账户dd0 ...
- 数据库mysql优化方案
1.创建索引对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致.如果不加索引的话,那么查找任何哪怕只是一条特定的数据 ...
- 关系型数据库MySQL主从同步-读写分离
1.环境准备 我的数据库版本是MySQL 5.6 MySQL主机至少两个实例,可以是多实例,可以是多台主机 关闭selinux,关闭防火墙等基础优化 2.安装 yum -y install make ...
随机推荐
- 20180708-Java基本数据类型
public class PrimitiveTypeTest{ public static void main(String[] args){ //byte System.out.println(&q ...
- 理解json和jsonp的定义和区别以及如何实际使用
(一)什么是跨域请求? 首先要理解什么是跨域? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的. 其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景. 常见 ...
- DELPHI之全局变量和局部变量
http://www.cnblogs.com/Stwo/archive/2011/07/11/2102816.html DELPHI之全局变量和局部变量 全局变量: 如果我们在应用程序一个单元中的in ...
- Linux 初始化系统 systemd - journald 日志
journalctl 中文手册 archlinux - journal systemd-journald 用于检索 systemd 的日志,是 systemd 自带的日志系统. 1. systemd- ...
- 在reshard过程中,将会询问reshard多少slots:
How many slots do you want to move (from 1 to 16384)?,取值范围为1~16384,其中16384为redis cluster的拥有的slots总数, ...
- cts测试流程
测试目的: 用于检测你做的Android系统是否满足兼容性要求,通俗点说,Google认为Android系统应该满足的条件,你需要满足. 例如框架层暴露给应用层的某些接口,Google认为你因该有,那 ...
- mybatise根据list参数查询
where id in<foreach item="item" index="index" collection="map.idList&quo ...
- JavaScript.InjectedScriptHost
"use strict"; (function(InjectedScriptHost, inspectedGlobalObject, injectedScriptId) { ...
- ArrayBlockingQueue使用
阻塞与非阻塞: 阻塞: 阻塞调用是没有获得资源则挂起进程,被挂起的进程进入休眠状态,调用的函数只有在得到结果之后才返回,进程继续. 对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但并不是一一 ...
- Webpack的使用指南-Webpack的常用解决方案
说是解决方案实际上更像是webpack的插件索引. 写这一篇的目的是为了形成一个所以,将来要用时直接来查找即可. 1.自动构建HTML,可压缩空格,可给引用的js加版本号或随机数:html-webpa ...