Mysql学习笔记系列(一)

postgresql和mysql的一转多多转一 日常工作中常有出现如下图的情形,需要将一个数据转成多行或者多列,或者由多行或者多列转成一个数据,本文分别用postgresql和mysql处理这个问题。 阅读详情

        本次mysql系列不会讲解具体的查询语句,而是放在mysql的一些性能优化和一些特性上,是学习笔记,供大家参考补充。

慢查询

        MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是记录运行10秒以上的语句。默认情况下,MySQL数据库并不启动慢查询日志,需要手动来设置这个参数。当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。
慢查询日志支持将日志记录写入文件和数据库表。   

定位慢查询

开源的运维工具Prometheus 、Skywalking和mysql的日志:linux下的mysql系统配置文件: /var/lib/mysql/localhost-slow.log。

导致慢查询的原因

聚合查询,多表查询,表大数据量查询,深度分页查询等。

如何分析

explain select col from table where condition

可以采用MySQL自带的分析工具 EXPLAIN 通过key和key_len检查是否命中了索引(索引本身存在是否有失效的情况)

通过type字段查看sql是否有进一步的优化空间,是否存在全索引扫描或全盘扫描

通过extra建议判断,是否出现了回表的情况,如果出现了,可以尝试添加索引或修改返回字段来修复

存储引擎

定义

        存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。

分类

常见的有myisam,innodb,memory等

只有innodb支持事务安全,其他的都不支持。

mysql体系结构

innodb

InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB是默认的 MySQL 存储引擎。

支持外键,行级锁,提高并发性能。遵行dml操作的acid原则,支持事务。

InnoDB存储引擎是mysql5.5之后是默认的引擎,它支持事务、外键、表级锁和行级锁。使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的;

MyISAM是早期的引擎,它不支持事务、只有表级锁、也没有外键,用的不多。MyISAM是非聚集索引,它也是使用B+Tree作为索引结构,但是索引和数据文件是分离的,索引保存的是数据文件的指针。

Memory主要把数据存储在内存,支持表级锁,没有外键和事务,用的也不多

索引

        索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

索引作用

         索引能够提高数据检索的效率,降低数据库的IO成本(不需要全表扫描) 通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗。

B树B+树

        B+Tree是在BTree基础上的一种优化,使其更适合实现外存储索引结构,InnoDB存储引擎就是用B+Tree实现其索引结构

        B树与B+树对比: ①:磁盘读写代价B+树更低;②:查询效率B+树更加稳定;③:B+树便于扫库和区间查询。

聚簇索引和非聚簇索引

聚簇索引

将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据,必须有且只有一个。

选举规则:

如果存在主键,主键索引就是聚集索引。

如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。

如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。

非聚簇索引(二级索引)

将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键。可以有多个。

节点上面带数据。

回表

通过二级索引找到对应的主键值,到聚集索引中查找整行数据,这个过程就是回表

覆盖索引

覆盖索引是指 查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到。

如果返回的列中没有涵盖已有的索引,有可能会触发回表查询,尽量避免使用select *

mysql超大分页处理

可以使用覆盖索引解决。

在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。

优化思路: 一般分页查询时,通过创建 覆盖索引 能够比较好地提高性能,可以通过覆盖索引加子查询形式进行优化。

select * from tb_sku t,     (select id from tb_sku order by id limit 10000000,10) a where t.id = a.id;

覆盖索引+子查询解决。

索引创建的原则

1). 针对于数据量较大,且查询比较频繁的表建立索引。 10w+

2). 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。

3). 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。

4). 如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。

5). 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。

6). 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。

7). 如果索引列不能存储NULL值,请在创建表时使用NOT NULL约束它。当优化器知道每列是否包含NULL值时,它可以更好地确定哪个索引最有效地用于查询。

R语言分类变量的统计描述 三篇介绍了连续变量的统计描述的R语言相关函数,计算数值的相关统计指标。本文介绍分类变量的统计描述及如何在R语言中实现。 不同于连续变量,分类变量的统计描述主要是汇总分类变量各类别例数及百分比。 1、table()函数 ... 阅读详情

相关推荐

【Unity报错】Unity导入海康SDK 报错 DllNotFoundException: PlayCtrl assembly

2.尝试按网上其他的办法(包括使用depengs查看dll依赖等)1.先检查Plugins文件夹中是否存在PlayCtrl文件。3.如果网上查阅的办法都不能解决,请继续往下看。更换低版本的SDK库文件。

weixin_42968584的博客 1126

【MySQL学习笔记】系列一:数据库概述、初识关系型数据库MySQL

摘要:本篇主要讲述数据库概述、关系型数据库MySQL的介绍、关系型数据库与菲关系型数据库的区别以及关系型数据的设计与应用。 💞💞觉得文章还不错的话欢迎大家点赞👍➕收藏⭐️➕评论💬支持博主🤞......

请你喝杯Java 1061

solidworks实体显示线框

solidworks实体莫名其妙显示为有点虚的线框

qq_35858902的博客 1万+

Mysql学习笔记(一)学完就出师系列哈哈哈

本篇笔记是参照书籍《SQL基础教程》撰写的,MICK著,孙淼、罗勇译 文章目录第一章 数据库和SQL1.1 DBMS概念数据库管理系统的种类:数据库结构1.2 SQL表的结构SQL摘要表的创建表的删除和更新表中插入数据变更表名第二章 查询基础2.1 select语句基础2.2 算术运算符2.3 逻辑运算符 基本注意事项: ;是SQL的结束符,换行不会影响语句结果,但是代码中间有空行(无任何字符的行)会造成执行错误。 数据库的名称只能使用小写字母 关键字不区分大小写,一般采用大写 字符串和日期常数需要使用单

qq_41721660的博客 858

RT-Thread学习笔记(5):SPI驱动框架分析

1、两个设备模型 在spi驱框架中,一般会自己初始化一个总线设备(rt_spi_bus),当我们通过挂载后,会相应注册一个从设备(rt_spi_device)。 1、总线设备模型 struct rt_spi_bus { struct rt_device parent; rt_uint8_t mode; const struct rt_spi_ops *ops; struct rt_mutex lock; struct rt_spi_device *owner; };

BLBQ962464的博客 1万+

数字IC后端实现 | Innovus各个阶段常用命令汇总

数字IC后端设计实现之Innovus常用命令汇总

weixin_37584728的博客 7312

MySQL系列文章:使用dbops搭建MySQL8.4.3 一主一备

使用dbops搭建MySQL8.4.3 一主一备以 MySQL8.4.3 一主一备为例以上就是使用dbops搭建MySQL8.4.3 一主一备的整个安装过程,有问题的小伙伴评论区留言哈!

扑火的小飞蛾 1578

北斗导航 | ILS(仪表着陆系统)、MLS(微波着陆系统)和GBAS(地基增强系统)的性能对比

最 早 的 GBAS 系 统 是 **局 域 增 强 系 统(LAAS)**,它是 1990 年由美国 Honeywell 公司 和 NASA 共 同 完 成 的 差 分 GPS(DGPS)演 变 而 来 的。1998 年,LAAS 被 ICAO 采 纳为 GBAS。2009 年 9 月 3 日 Honeywell 公 司 的GBAS 系统通过了 **CAT-I 精密进近着陆系统**的设计认证 ,而 **CAT-II 和 CAT-III 系统的研发和验证工作也正在有序的进行中**

尘世冰封的专栏 3983

MySQL 学习笔记①

SQL的基本语句(DDL、DML、DQL、DCL)和函数;常用的约束和外键约束、多表查询(自连接、外连接、内连接、联合查询、子查询)、事务的简单介绍(ACID、事务的隔离级别)。

做笔记,记录学习中遇到的问题。 2207

OpenCV计算机视觉实战(3)——计算机图像处理基础

本文全面介绍了计算机视觉和数字图像处理的基础知识。从最基本的像素概念入手,详细讲解了图像在计算机中的表示方式,包括RGB、CMYK等色彩空间的工作原理及其应用场景。还系统分析了常见图像和视频文件格式的特点,梳理了计算机图像处理技术的发展历程,并重点介绍了OpenCV这一强大的开源计算机视觉库的功能与应用领域。

qq_30167691的博客 1738

2020计算机专业保研夏令营面经:中科院计算所网数机试题目

计算所网络数据科学与技术重点实验室的第一阶段是机试。机试不限程序语言,要求提交源代码。

乔卿的博客 2957

MySQL系列之体系结构原理学习笔记

MySQL系列之体系结构原理学习笔记 引用来自官网的图,MySQL Server架构从上到下依次为网络连接层(Connectors)、服务层(MySQL Server)、存储引擎层(Plugable Storage Engines)、系统文件层(File System)

Nicky's blog 9026

在blender中安装vtk插件

Blender 是一个开源的、功能强大的3D计算机图形软件,广泛用于创建动画片、视觉效果、艺术作品、3D打印模型、互动3D应用程序和视频游戏。Blender 是由 Blender 基金会开发和维护的,具有丰富的功能和灵活的扩展性。在github上下载zip插件。

如果想成为中心,那么就到中心去吧。 292

原来一条select语句在MySQL是这样执行的《死磕MySQL系列 一》

原来一条select语句在MySQL是这样执行的

咔咔博客 4439

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MySQL系列之事务编程学习笔记

MySQL基础之事务编程学习笔记 在学习《MySQL技术内幕:SQL编程》一书,并做了笔记。本博客内容是自己学了《MySQL技术内幕:SQL编程》一章根据自己的理解做的笔记,内容和书本并不一致,不过书本实验都经过自己验证,基于MySQL5.7版本。做笔记的目的是方便自己复习,同时分享出来或许对其他人或许有点帮助 提到事务肯定会想到事务的4个特性ACID,要保证业务的正常使用,必须保证ACID,AC...

Nicky's blog 6302

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MySQL学习笔记(一)——MySQL下载安装配置

在这一部分,我们先来讲解三个概念:数据库、数据库管理系统、SQL。而目前主流的关系型数据库管理系统的市场占有率排名如下:Oracle大型的收费数据库,Oracle公司产品,价格昂贵。MySQL开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。目前Oracle推出了收费版本的MySQL,也提供了免费的社区版本。SQL ServerMicrosoft公司推出的收费的中型数据库,C#.net等语言常用。

weixin_56370772的博客 1085

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MySQL数据库学习笔记(一)

本文讲解了数据库基础概念、SQL语法分类与使用,以及表结构定义与常用数据类型

2402_82857752的博客 998

MYSQL学习笔记(一)

MySQL学习笔记(一) MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 一、MySQL安装教程 安装教程可参考: http://www.runoob.com/mysql/mysql-install.html 下载地址: https://dev.mysql.com/downloads/mysql/ ...

luckyli328的博客 496

系列一、安装MySQL

我分享的:链接:https://pan.baidu.com/s/188_9RnBYlWVzFb_UJH5aaQ?pwd=yyds提取码:yyds。

仰望星空,脚踏实地!安全感是自己给的,努力才是一辈子的安全感。 1357

MySQL系列之索引知识学习笔记

继我的上篇博客:Oracle索引知识学习笔记之后,再记录一篇MySQL的索引知识学习笔记,本博客是我在学习尚硅谷的学习教程后,做的笔记,当然我不是为了所谓宣传,仅仅是学习记录的笔记,本来可以不分享出来,分享出来的目录仅仅可以给网上的学习者参考学习,同时写在csdn比较方便,支持图片上传,也方便自己以后查找复习 文章目录一、索引的概念二、索引分类三、索引用法四 、索引架构简介五、索引适用的情况六、索...

Nicky's blog 3886

mysql学习笔记一(python连接mysql)

最近学习python,顺带学习mysql,学习方式主要与其他数据库进行对比学习,其中部分内容参考大神们的总结,并在文中相应的位置做了标示。 1、mysql与oracle的简单区别 2、mysql安装 3、Mac命令行启动MySQL 4、python连接mysql数据库 5、Conda 6、python操作mysql数据库 1、mysql与oracle的简单区别 1)、体量 ORA...

水之光 1万+

【Mysql学习笔记】一、部署Mysql

(4)二进制包安装:软件包名字较长,带有版本号、操作系统平台信息、cpu架构等信息,比如mysql-5.0.45-linux-x86_64-glibc23.tar.gz 这种软件包是源代码已经被编译过的,我们只需要下载、解压后,可以直接在对应的系统平台上运行,所以这种包比较大,使用比较简单。多实例这个概念,也就是一个程序,被我们运行了多个单独的个体,所以也不限于mysql,比如nginx, apache, redis, memcached等都可以多实例,只要它们的端口、数据文件、进程都是单独的可以。

因为热爱所以坚持 2664

《MySQL知必会》学习笔记总目录+思维导图

大家好! 我是小黄,很高兴又跟大家见面啦 ! 今天更新的是: 《MySQL知必会》学习笔记总目录+思维导图。 往期检索:程序设计学习笔记——目录 创建时间:2020年12月日 软件版本: MindMaster Pro 本篇文章是对《MySQL知必会》所有知识点的笔记总结归档,虽说是2021年的,但是这些都是最核心的底层基础知识,过多少年都不会有很大的变化,核心都差不多。 欢迎大家关注我的微信公众号:在下小黄 ,一起交流学习。 学习图书:《MySQL知必会》 其它学习时总结的目录笔记,有思维导图

在下小黄的博客 788

MySQL学习笔记(一)

MySQL启动与停止DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。DCL英文全称是Dala ControlLanguaqe(数据控制语言),用来管理数据库用户,控制数据库的访问权限制。

菜一头包的博客 1223

MySQL系列之执行计划学习笔记

继上一篇博客《MySQL的索引知识学习笔记》之后,我再记录一篇MySQL执行计划方面的博客,本博客是我在学习尚硅谷的学习教程后,做的笔记,当然我不是为了所谓宣传,仅仅是学习记录的笔记。本来可以不分享出来,不过,分享出来的笔记不仅可以给网上的学习者参考学习,同时写在csdn比较方便,可以支持图片上传,也方便自己以后查找复习 附录:我创建的数据库方面的专栏 SQL调优方面的专栏 MySQL知识方面的...

Nicky's blog 3917

MySQL 学习笔记②

本博客内容概述:存储引擎、索引、SQL 优化、视图 / 存储过程 / 触发器、锁、InnoDB 引擎、MySQL 管理。

做笔记,记录学习中遇到的问题。 5756
上一篇: redis优化系列(六)
下一篇: Mysql学习笔记系列(二)
happystudy_neu
博客等级 码龄4年 1140粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值