mysql的逻辑分层:连接层 服务层 引擎层 存储层

引擎层主要分为两类:InnoDB、MyIsam(使用show engines;查看)

InnoDB是事务优先的,会进行行锁,适合高并发操作

MyIsam是性能优先的,进行表锁

sql优化点:等待时间长,执行时间长,性能低下,多表连接查询,服务器参数设置不合理(线程数、缓冲区)

编写过程 select ... from ... join... on ... where ... group by ... having... order by...

解析过程 from ... on ... join... where ...group by... having...select... order by...

具体内容可以看步步深入:MySQL架构总览->查询执行流程->SQL解析顺序 - AnnsShadoW - 博客园​www.cnblogs.com

sql优化主要是优化索引,索引是一个高效查询数据的数据结构,索引一般是一颗树(树:b树或者hash树等)示例如下。

索引的弊端也是有的:索引本身需要空间可以存放内存或者硬盘内部;索引在有的情况下不适用:数据量少,频繁更新的数据,很少使用的字段,索引会提高查询但是减低增删改效率(但是数据库的大部分操作是查询,增删改较少)。

优势:提高查询效率(降低IO使用率)、降低CPU使用率(...order by xx desc,直接在B树排好了)。

B树在磁盘中的结构是怎么样的呢?

三层Btree可以存放上百万条数据,每一层可以超过两个分支。B树一般是值B+树,数据全部放到叶节点中,B+树中查询任意数据都是n次(n为树的高度)。

B树与B+树的区别,可以看以下文章https://blog.csdn.net/login_sonata/article/details/75268075​blog.csdn.net

索引的分类:单值索引(单列,一个表可以有多个单值索引)、唯一索引(不能重复)、复合索引(多个列构成的索引,符合索引不一定是多个列全中)。

第一种

# 单值索引 create 索引类型 索引名 on 表(字段)

create index dept_index on tb(dept);

# 唯一索引

create unique index name_index on tb(name);

# 复合索引

create index dept_name_index on tb(dept, name);

第二种

# alter table 表名 索引类型 索引名(字段)

# 单值索引

alter table tb add index dept_index(dept);

# 唯一索引

alter table tb add unique index name_index(name);

# 符合索引

alter table tb add index dept_name_index(dept, name);

事务操作只对DML增删改有效,DDL会自动提交。

主键索引是唯一索引的一种,但是主键索引不能为null。

删除索引

drop index 索引名 on 表名

drop index name_index on tb;

SQL优化问题

1、分析SQL的执行计划:explain。可以模拟SQL优化器优化SQL执行语句。

2、mysql查询自动优化,会干扰优化。

explain一般返回这么几个字段:id,select_type,type

不过SQL执行计划不同版本不一样,看具体版本,不用纠结。

这里用explain返回结果时,id越大越先执行(本质是嵌套查询),id相同时,顺序执行。

select_type:primary(主查询)、subquery(子查询)、simple(简单查询,不包含子查询和union)、derived(衍生查询,用到了临时表。在from子查询中只有一张表,或者union前一个查询)

type:索引类型

一般system > const > eq_ref > ref > range > index > all性能依次降低,实际能达到ref > range即可。前提是必须建立索引。

这个理解即可。

eq_ref:查询结果1v1;ref:查询结果1vN(N>=0);range(where between,<=, >=,in等),其中in在查询数据在一半以上时,退化为all或index。尽量避免使用in;index:查某一索引字段的;all:全表所有字段或者没有索引的字段。

下期讲索引优化方案。

数mysql据分析优化_从零开始学习数据分析-mysql架构与优化理论相关推荐

  1. mysql导入dat文件_从零开始学习 MySQL 系列--索引、视图、导入和导出

    前言 上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识. 作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会了解,尤其是关于索引的内 ...

  2. left join 索引失效无条件_从零开始学数据分析-mysql索引优化方案

    接上节,执行计划还有一个重要的字段是extra,以下是出现的选项. 1.using filesort: 需要一次额外的查询或者排序,性能开销大.常见于order by语句中. create 对于单索引 ...

  3. mysql单表操作_深入学习之mysql(三)单表操作

    1.创建表的结构和数据 CREATE TABLE `t_student`( `id` INT PRIMARY KEY, `stuName` VARCHAR(10) NOT NULL, `age` IN ...

  4. mysql数据库学号数据类型_数据库学习笔记——MySQL数据类型

    一.数据类型: 1.整型(xxxint) 2.浮点型(float和double) 3.定点数(decimal) 4.字符串(char,varchar,xxxtext) 5.二进制数据(xxxBlob) ...

  5. DL之CNN优化技术:学习卷积神经网络CNN的优化、实践经验(练习调参)、从代码深刻认知CNN架构之练习技巧

    DL之CNN优化技术:学习卷积神经网络CNN的优化.调参实践.从代码深刻认知CNN架构之练习技巧 目录 卷积神经网络CNN调参学习实践 练习技巧 1.练习攻略一 2.VGG16练习攻略二 卷积神经网络 ...

  6. 从零开始学习UCOSII操作系统13--系统移植理论篇

    从零开始学习UCOSII操作系统13--系统移植理论篇 1.什么是系统移植? (1)UCOSII移植到不同的处理器上,所谓的移植就是将一个实时的内核能在其他的微处理器或者微控制器上运行. 为了方便移植 ...

  7. access 导入 txt sql语句_从零开始学习 MySQL 系列索引、视图、导入和导出

    阅读本文大概需要 8 分钟 前言上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识.作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会 ...

  8. mysql query 优化_第 8 章 MySQL 数据库 Query 的优化

    前言: 在之前"影响 MySQL 应用系统性能的相关因素"一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 Query 语句的优化 ...

  9. mysql 新增从数据库_从零开始学 MySQL - 创建数据库并插入数据

    目录 1.实验内容 2.实验知识点 3.开发准备 4.实验总结 1.实验内容 本次课程将介绍 MySQL 新建数据库,新建表,插入数据以及基本数据类型的相关知识.本节实验将创建一个名为 mysql_s ...

最新文章

  1. 国内最火的五款HTML5前端开发框架
  2. Build与Version
  3. pipe读写前设置O_NOATIME
  4. 简单分析及总结BlockingQueue接口下七个常用类
  5. Dell笔记本双系统安装(Ubuntu 16.04)
  6. 配置Hibernate二级缓存步骤
  7. 一加手机史上超大购机优惠 以旧换新至高补贴3800元
  8. 【Vue】—子级向父级传递数据
  9. zabbix修改tomcat监控端口
  10. 用DIB位图显示图像
  11. JAVA 连接sftp服务器,用户名密码方式链接(类似于FinalShell以ssh方式链接LINUX)
  12. Html实现QQ音乐首页(响应式)
  13. 反思腾讯:大数据与AI时代的危与机
  14. android触摸屏映射,解决android4.0 触摸屏分辨率映射不准
  15. python——matplotlib图形参数设置、大小、参考线
  16. Apereo CAS 4.1 反序列化命令执行漏洞复现
  17. Jenkins + Gitlab+ Docker + SpringBoot 构建流水线
  18. google hacking常用语法
  19. Python 图片处理模块之PIL
  20. 计算机中丟失Slc.dll,调试符号不会加载slc.dll和sppc.dll

热门文章

  1. nginx 监听同一端口
  2. linux vnc 改端口号,基于Linux中vnc配置端口号的修改方法
  3. java微博开发_【新手入门篇】新浪微博应用开发之Java入门篇
  4. python图片保存重命名_Python实现重命名一个文件夹下的图片
  5. 梦幻群侠传5帮派修炼_梦幻西游:2020年十大更新回顾 法连不秒空和连续战斗修复...
  6. Win7蓝屏代码0x000000001e怎么解决
  7. c语言.h文件怎么写,关于C语言中.h文件怎么书写?
  8. 通俗易懂告诉你CPU/GPU是什么?
  9. SpringBoot的AOP是默认开启的,不需要加注解@EnableAspectJAutoProxy____听说SpringAOP 有坑?那就来踩一踩
  10. java用XSSFWorkbook实现读写Excel