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值时,它可以更好地确定哪个索引最有效地用于查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/343451.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java下载FTP服务器上的资源,附带FTP工具类

通过xftp可以看到目标服务器上面的资源如下&#xff1a; 第一步&#xff1a;导入ftp依赖&#xff1a; <dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.7</version> <!-- 使用最新…

Portainer Docker容器可视化管理平台实践

Portainer Docker容器可视化管理平台实践 引安装登录Remote ENV 实践 引 平常用docker命令操作比较多&#xff0c;找了一款docker可视化工具&#xff0c;方便快速预览和批量操作&#xff0c;不想一行一行敲的时候&#xff0c;可以偷偷懒。Portainer试用了一下&#xff0c;安装…

Hbas简介:数据模型和概念、物理视图

文章目录 说明零 BigTable一 Hbase简介二 HBase 访问接口简介三 行式&列式存储四 HBase 数据模型4.1 HBase 列族数据模型4.2 数据模型的相关概念4.3 数据坐标 五 概念&物理视图 说明 本文参考自林子雨老师的大数据技术原理与应用(第三版)教材内容&#xff0c;仅供学习…

特斯联携手华为发布联合解决方案,助力京津冀千行百业智能升级

近日&#xff0c;特斯联受邀出席了由廊坊市人民政府主办&#xff0c;廊坊经济技术开发区管委会联合华为技术有限公司协办的河北人工智能计算中心上线仪式暨新一代信息技术高端论坛&#xff0c;在论坛上&#xff0c;华为携手特斯联等伙伴共同发布了河北人工智能计算中心联合解决…

Git--基本操作介绍(2)

Git 常用的是以下 6 个命令&#xff1a;git clone、git push、git add 、git commit、git checkout、git pull. 说明&#xff1a; workspace&#xff1a;工作区staging area&#xff1a;暂存区/缓存区local repository&#xff1a;版本库或本地仓库remote repository&#xf…

VS2019查看文件编码格式

文件->高级保存选项 在这里可以看见现在的编码格式也可以修改编码格式 如果没有高级保存选项的话可以参考这篇博客进行设置

人大金仓数据库授权文件过期解决

一台用于测试的人大金仓数据库访问失败。 登录后发现服务停了。 使用命令行启动&#xff0c;提示服务过期。 查网上资料&#xff0c;说替换原有文件可以解决。 于是去官网下载一个新的&#xff0c;替换掉原来的授权文件。 再次启动数据库&#xff0c;还是提示授权文件过期。…

leetcode:最接近的三数之和---(双指针,排序,数组)

题目&#xff1a; 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例&#xff1a; 示例 1&#xff1a; 输入&#xff1a;nums [-1…

第一堂复试

1.数据结构的基本概念 数据元素 相当于一个类 数据对象是数据元素的集合 数据项&#xff1a;具体的属性 2.数据结构三要素 1.一般线性表相当于数组&#xff0c;2.栈先进后出&#xff0c;3.队列先进先出 非线性结构一般是一对多 线性结构一般是一对一 3.数据的存储结构 4.算…

通过curl访问k8s集群获取证书或token的方式

K8S安全控制框架主要由下面3个阶段进行控制&#xff0c;每一个阶段都支持插件方式&#xff0c;通过API Server配置来启用插件。 1. Authentication&#xff08;认证&#xff09; 2. Authorization&#xff08;授权&#xff09; 3. Admission Control&#xff08;准入控制&#…

解决router重复push报错

vue-router重复push报错解决 一、报错情况二、解决1、重写push方法2、代码解释&#xff08;来自讯飞星火AI&#xff09; 一、报错情况 情况复现&#xff1a;使用router跳转时&#xff0c;router会有一个历史记录栈&#xff0c;当新的push元素和上一次最后push的元素一致&#…

对于超低延迟SSD,IO调度器已经过时了吗?-part2

为了进行这项研究&#xff0c;他们设计了一套严谨的实验方法论&#xff0c;包括在配备了高速Intel Optane P4801X Series NVMe SSD的服务器上执行一系列微观和宏观基准测试&#xff0c;同时监测系统能耗情况。这些测试涵盖了多种工作负载场景&#xff0c;从单一进程提交大量请求…

php基础学习之数据类型

php数据类型的基本概念 数据类型&#xff1a;data type&#xff0c;在PHP中指的是数据本身的类型&#xff0c;而不是变量的类型。 PHP 是一种弱类型语言&#xff0c;变量本身没有数据类型。 把变量类比成一个杯子&#xff08;容器&#xff09;&#xff0c;杯子可以装雪碧、可…

E - Souvenir(图论典型例题)

思路&#xff1a;对于有很多询问的题&#xff0c;一般都是先初始化。我们求出每个点到其他点的最短路径以及相同路径下最大的价值和即可。 代码&#xff1a; #include <bits/stdc.h> #define pb push_back #define a first #define b second using namespace std; type…

C++面试:跳表

目录 跳表介绍 跳表的特点&#xff1a; 跳表的应用场景&#xff1a; C 代码示例&#xff1a; 跳表的特性 跳表示例 总结 跳表&#xff08;Skip List&#xff09;是一种支持快速搜索、插入和删除的数据结构&#xff0c;具有相对简单的实现和较高的查询性能。下面是跳表…

排序(插入排序)

现在&#xff0c;我们学习了之前数据结构的部分内容&#xff0c;即将进入一个重要的领域&#xff1a;排序&#xff0c;这是一个看起来简单&#xff0c;但是想要理清其中逻辑并不简单的内容&#xff0c;让我们一起加油把&#xff01; 排序的概念及其运用 排序的概念 排序&…

激光雷达行业梳理1-概述、市场、技术路线

激光雷达作为现代精确测距和感知技术的关键组成部分&#xff0c;在近几年里取得了令人瞩目的发展。作为自动驾驶感知层面的重要一环&#xff0c;相较摄像头、毫米波雷达等其他传感器具有“ 精准、快速、高效作业”的巨大优势&#xff0c;已成为自动驾驶的主传感器之一&#xff…

CVHub|AI标注神器 X-AnyLabeling-v2.3.0 发布!支持YOLOv8旋转目标检测、EdgeSAM、RTMO等热门模型!

本文来源公众号“CVHub”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;AI标注神器 X-AnyLabeling-v2.3.0 发布&#xff01;支持YOLOv8旋转目标检测、EdgeSAM、RTMO等热门模型&#xff01; 今天主要为大家详细介绍 X-AnyLabeling …

NQA测试机制—UDP Jitter测试

概念 UDP Jitter是以UDP报文为承载&#xff0c;通过记录在报文中的时间戳信息来统计时延、抖动、丢包的一种测试方法。Jitter&#xff08;抖动时间&#xff09;是指相邻两个报文的接收时间间隔减去这两个报文的发送时间间隔。 UDP Jitter测试的过程如下&#xff1a; 1. 源端&a…

【大数据处理技术实践】期末考查题目:集群搭建、合并文件与数据统计可视化

集群搭建、合并文件与数据统计可视化 实验目的任务一&#xff1a;任务二&#xff1a; 实验平台实验内容及步骤任务一&#xff1a;搭建具有3个DataNode节点的HDFS集群集群环境配置克隆的方式创建 Slave 节点修改主机名编辑 hosts 文件生成密钥免认证登录修改 hadoop 的配置文件编…