mysql刨根问底

索引:排好序的数据结构

二叉树:

红黑树

hash表:

b-tree:

   叶子相同深度,叶节点指针=空,索引元素不重复,从左到右递增排序

   节点带data

b+tree:

   非叶子节点只存储索引,可放更多索引

   叶子节点含all索引 用指针双向连接,提高区间访问性能

页大小16kb,2000w 高度3   3次磁盘io

   根节点常驻内存,减少磁盘io

引擎

innodb

    frm:           ibd:

   表数据文件本身按b+tree组织多索引结构文件

   聚集索引-叶节点含完整数据

myisam:索引/数据文件分离

    frm。 MYD。 MYI

    主键b+tree存储 data是地址引用,非聚集

explain少不了这个大佬

type关联类型或访问类型 

  mysql如何查找表中的行,system const  eq_ref  ref  range  index  all

  null:mysql在优化阶段分解查询语句,执行阶段不需要访问表 索引

  system,const:查询某部分优化并将其转化成一个常量

  eq_ref:primary key或unique_key 索引的all部分被连接使用,最多只会返回一条符合条件的记录

  ref:没有用唯一索引

不走索引:

   引擎本身不支持索引

   不等于 

   is null / is not null

   like 通配符: select 查询具体的列 

   复杂函数

   字符串不加单引号:类型转换

   or / in 查询时  不一定用索引,检索比例 表大小等因素不一定用索引

   范围查询优化

索引(a,b,c)

where a = 4 and b like 'kk%' and c=6;  //使用abc

where a = 4 and b like 'k%kk%' and c=7; //使用ab c

索引下推5.6后

trace工具:命令行打开 

  影响性能,分析执行计划

   sql准备阶段  格式化sql   

   sql优化阶段:去掉无意义语句

优化

order by与group by

 最左前缀法则,中间字段不能断

 using filesort 标识没走索引,order by * asc ,* desc  索引排序方式不同8后降序索引可以支持

  • using index指mysql扫描索引本身完成排序 效率高, filesort效率低没有用索引
  • order by使用索引最左前列 / where与order by条件组合满足索引最左前列
  •  尽量在索引列上完成排序,遵循索引建立时最左前缀法则
  • order by的条件不在索引列上,会产生using filesort
  • group by与order by类似,先排序后分组,索引创建顺序最左前缀法则
  • group by不需要排序可加group by null禁止排序

where 高于having,能写where中的限定条件就不要去having限定

filesort 文件排序

 单路排序:一次性取出满足条件的字段,sort buffer (1M)排序;trace看sort_mode显示sort_key additional_fields 或 sort_key,packed_additional_fields

 双路排序:回表排序,据相应条件取出排序字段和可直接定位的行数id,sort buffer排序,再次取需要的字段

  字段总长度 < max_length_for_sort_data,单路排序

  字段总长度 > max_length_for_sort_data,双路排序

索引设计原则

代码先行,索引后上

联合索引尽量覆盖

小基数字段不建索引:重复值少

长字符串前缀索引,order by和group by 中不能用

where与order by冲突时优先where

执行小表驱动大表

left  join左表驱动表  right join右边驱动表

   NLJ: 循环驱动表 读取关联字段  取出另一张被驱动表满足条件的数据,扫描磁盘

   BNL:驱动表数据读到join buffer中,被驱动表每一行取出与join buffer对比

   straight_join t1 on t2.a=t1.a 强制指定驱动表

      被驱动表的关联字段无索引的关联查询,BNL ;有索引NLJ

in:B表的数据集小于a表,in 优先exists

     select * from A where id in(select id from B);

exists当A表数据小于B,exists优先in

     select* from A where exists (select 1 from B where B.id=A.id)

count(*)  count(1)> count(字段) > count(id) 

  字段有索引:二级索引 ,比主键索引大小要小

  count(1) count(字段) 执行过程类似,count(1)不需要取字段

  count(*)做了优化,不取值 按行累加 效率高

查询mysql自己维护总行数

   myisam维护总行数,innodb不会存储总行数

show table status可查询表总行数

整型无负数,unsigned可扩大一倍

tinyint代替enum bitenum set

避免使用整数的显示宽度:不要int(10) 直接int,10是显示长度

decimal注意设置长度,精确计算

整形运算 存储实数:实数乘以相应的倍数后再操作

整数通常是最佳的数据类型:速度快 auto_increment

事务

原子  一致  隔离  持久

大事务

    并发时连接池撑爆/锁太多超时阻塞/

    执行时间长 主从延迟 /回滚时间长/undo log膨胀/易死锁

优化:

 查询放事务外 (rr除外) / 避免远程调用 设置超时 / 避免一次性处理太多数据  / 

 更新设计加锁操作尽可能放到事务靠后的位置/能异步尽量异步 /  应用保证数据一致性 

隔离级别:undo多版本链

select 快照读 历史数据

update  insert   delete 当前读,最新数据

读未提交:read uncommit

  脏读,

读已提交:read commit 

    乐观锁 行锁  语句级快照读

    tx_id:

    roll_pointer:undo log

可重复读:repeatable read

    不能用版本号标识 读的是之前的   事务级快照

    幻读:新增的数据

  查询需要加锁吗?rr  读同一时间维度  需要

串行:serializable 

  读了之后不能修改

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言经典例题(8) --- 进制A+B、网购、及格分数、最高分数、计算一元二次方程

文章目录 1.进制AB2.网购3.及格分数4.最高分数5.计算一元二次方程 1.进制AB 题目描述&#xff1a; 输入一个十六进制数a&#xff0c;和一个八进制数b&#xff0c;输出ab的十进制结果&#xff08;范围-231~231-1&#xff09;。 输入描述&#xff1a; 一行&#xff0c;一个十六…

不使用额外空间交换两个数

1) 算术x x y;y x - y;x x - y; 2) 异或x x^y;// 只能对int,char..y x^y;x x^y;x ^ y ^ x;加法和异或这两种方法都是用于交换两个数的值而不使用额外空间的方法。它们的适用类型如下&#xff1a; 加法方法&#xff1a; 适用于整数类型&#xff08;int、long、long lo…

C++对象的创建和使用

定义了类&#xff0c;就相当于定义了一个数据类型。类与int、char等数据类型的使用方法是一样的。可以定义变量&#xff0c;数组和指针等。使用类定义的变量通常称为该类的对象。 对象的定义格式如下&#xff1a; 类名 对象名; 1.对象访问其成员 对象通过"."访问它的…

[NCNN学习笔记]-4

1、前言 继续学习NCNN。本次学习binaryop和eltwise。 2、学习内容 2.1、binaryop binaryop是用来二元计算的op&#xff0c;先来看binaryop.h的中关于二元计算的定义&#xff0c;其中二元计算定义了如下操作。 enum OperationType {Operation_ADD 0,Operation_SUB 1,Oper…

垃圾回收:垃圾回收器

目录 垃圾回收器 评估GC的性能指标 7种典型的垃圾回收器 Serial回收器&#xff1a;串行回收 ParNew回收器&#xff1a;并行回收 Parallel回收器&#xff1a;吞吐量优先 CMS回收器&#xff1a;低延迟 G1回收器&#xff1a;区域化分代式 G1回收过程1-年轻代GC G1回收过程…

自信当众讲话:从紧张到自如的转变之路

自信当众讲话&#xff1a;从紧张到自如的转变之路 在人生的舞台上&#xff0c;当众讲话是每个人都可能面对的挑战。然而&#xff0c;对于许多人来说&#xff0c;站在众人面前讲话却是一件令人紧张甚至恐惧的事情。这种紧张感往往源于对自我能力的怀疑&#xff0c;对未知的恐惧…

PyTorch----torch.nn.Linear()函数

torch.nn.Linear是PyTorch中的一个模块&#xff0c;用于在神经网络中实现完全连接层。它表示输入张量的一个线性变换通过将它与一个权矩阵相乘并加上一个偏置项。 下面是torch.nn.Linear的语法: torch.nn.Linear(in_features, out_features, biasTrue)参数&#xff1a; in_f…

neo4j使用详解(二、cypher语法基础——最全参考)

1.简介 Cypher是一种声明式图数据库查询语言&#xff0c;它具有丰富的表现力&#xff0c;能高效地查询和更新图数据。具有以下特点&#xff1a; 是一种声明性模式匹配语言遵循SQL语法的语法是非常简单且人性化、可读的格式 语法详情请看博主其他博客&#xff1a; 一、cypher插…

JS——9大陷阱

一、警惕A>X>B写法 3>2>1 返回值为false&#xff08;原因&#xff1a;3>2为true&#xff0c;会默认转成数字1&#xff0c;1>1为false&#xff09; 1<4<3 返回值为true&#xff08;原因&#xff1a;1<4为true&#xff0c;会默认转成数字1&#xff…

Leetcode第35题:搜索插入位置

代码实现 class Solution:def searchInsert(self, nums: List[int], target: int) -> int:if target in nums:return nums.index(target)index0for num in nums:if target>num:index1else:nums.insert(index,target)breakreturn index解题思路:先判断target是否在nums中…

【简单随机抽样】

文章目录 什么是简单随机抽样&#xff1f;简单随机抽样的步骤简单随机抽样的优点简单随机抽样的缺点 什么是简单随机抽样&#xff1f; 简单随机抽样是指从总体中以相同的概率随机选择一定数量的样本单元组成样本的一种方法。它要求每个样本单元被抽中的机会是均等的。每一个样…

滴滴出行高级Node.js开发工程师笔试题2024

今天参加了一个滴滴出行的Node.js岗位面试&#xff0c;一面为腾讯视频面试&#xff0c;俩个面试官。面试官比较深入问一些你过去做个的项目&#xff0c;问你解决了哪些棘手的问题。 还有就是他们比较关注性能优化&#xff0c;会问你们现在项目的峰值QPS是多少&#xff0c;如何进…

ChatGPT之道:AI与编程的完美融合

ChatGPT无限次数:点击直达 ChatGPT之道&#xff1a;AI与编程的完美融合 引言 随着人工智能技术的发展&#xff0c;AI在各个领域都展现出了惊人的应用潜力。在编程领域&#xff0c;AI的应用也是愈发广泛。其中&#xff0c;ChatGPT作为一种基于大型神经网络的自然语言生成模型&…

2024第二届经济管理、贸易与信息技术创新国际会议(ICEMITI2024)

2024第二届经济管理、贸易与信息技术创新国际会议&#xff08;ICEMITI2024&#xff09; 会议简介 2024第二届经济管理、贸易与信息技术创新国际会议&#xff08;ICEMITI2024&#xff09;将在中国郑州举行。这是一个重要的学术会议&#xff0c;旨在讨论当前经济管理、贸易和信…

[DDD] ValueObject的一种设计落地及应用

目录 前言一、ValueObject二、设计2.1 接口2.2 单一值ValueObject2.3 单一字符串ValueObject 三、实现3.1 示例3.1.1 PhoneNumber3.1.2 SocialCreditCode 四、使用4.1 异常处理4.2 Json 反/序列化4.2.1 请求体4.2.2 HTTP接口4.2.3 用例 4.3 JPA/MyBatis4.3.1 Converter或TypeHa…

vue响应式基础

声明响应式状态​ ref()​ 在组合式 API 中&#xff0c;推荐使用 ref() 函数来声明响应式状态&#xff1a; import { ref } from vueconst count ref(0) ref() 接收参数&#xff0c;并将其包裹在一个带有 .value 属性的 ref 对象中返回&#xff1a; const count ref(0)c…

202449读书笔记|《悦读诗 乐生活》——跌倒,是生活的偶然 发光,是生命的态度

202449读书笔记|《悦读诗 乐生活》——跌倒&#xff0c;是生活的偶然 发光&#xff0c;是生命的态度 第一篇 全都喜欢上第二篇 生如夏花第三篇 “希望”是带有羽毛之物第四篇 我来到这世界…… 《悦读诗 乐生活&#xff1a;小学生经典现代诗歌鉴赏集》赵迁编著&#xff0c;是小…

【JavaEE初阶系列】——多线程案例三——定时器

目录 &#x1f6a9;定时器是什么 &#x1f6a9;标准库中的定时器 &#x1f6a9;自定义定时器 &#x1f388;构造Task类 &#x1f4dd;相对时间和绝对时间 &#x1f388;构造MyTime类 &#x1f4dd;队列空和队列不为空 &#x1f4dd;wait(带参)解决消耗资源问题 &#…

多列数据表,复制插入一条有唯一索引限制的数据

假如你有一张表&#xff08;列简单列举四个&#xff0c;实际可能十好几二十好几的字段&#xff09; idnameagesex1zhangsan10男2lisi20男3wangermazi30男4xiaotaoqi40男 你想复制id4的数据&#xff0c;只把id变为6其他信息不变&#xff0c;来给自己用&#xff0c;只有主键变更…

docker配置镜像加速后容器和镜像消失

一、问题描述 根据阿里云给docker配置镜像加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://gt6j98xi.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl rest…