mysql sql优化(索引优化)经验漫谈

news2024/11/30 10:54:49

在这里插入图片描述

文章目录

  • 1. 当用sql查找是否“存在”场景
  • 2. where 条件 in的限制
  • 3. updade语句要不要考虑索引的命中情况
  • 4. mysql 预编译 多线程
  • 5. 函数与索引失效的关系
  • 6. mysql隐性类型转换与索引失效的关系
  • 7. 联合索引
  • 8. 联合索引最左匹配原则
  • 9. 回表 索引覆盖 聚簇索引 非聚簇索引
  • 10. 前缀索引 前缀系数注意点
  • 11. collate 可以设置mysql区分大小写
  • 12. explain cost

1. 当用sql查找是否“存在”场景

原sql:

select count(1) from table where a = 1

改为

select 1 from table where a = 1 limit 1

当确定查询结果就是一条时,勇敢的加上limit 1,使数据库查询到一条就返回;
这种判断是否存在的场景,不要再用count(1)、count(*)、count(字段)了

2. where 条件 in的限制

在oracle中,in()中的数量限制为1000;
在mysql中,没有对in()中数量进行限制,只是限制了sql语句的大小不能超过4MB,但是in中的数量较大时会使查询语句放弃索引,为了使用到索引,可以分多次查,比如一万条数据,分十次查,每次in中的数量为1000,虽然与数据库的连接次数变多了,但总体查询速度还是变快的,而且还有数据库连接池的存在,所以连接次数变大的影响很弱

3. updade语句要不要考虑索引的命中情况

update语句会先查询到更新的语句然后才进行更新,所以也是需要索引命中情况良好的

4. mysql 预编译 多线程

相同的语句,即时多次连接数据库执行,数据库也只会预编译一次,所以相同的语句一般不会使用多线程处理,而是不同的语句可以考虑使用多线程处理

5. 函数与索引失效的关系

<!-- 这种情况不会失去索引 -->
select name from table where name = upper(#{vo.name})
<!-- 这种情况会失去索引 -->
select name from table where upper(name) = #{vo.name}

6. mysql隐性类型转换与索引失效的关系

前情:id类型是bigint,name类型是varchar(注意引号的添加与否)

<!-- 这种情况不会失去索引 -->
select name from table where id = '1';
<!-- 这种情况会失去索引 -->
select name from table where name = xiaohua;

7. 联合索引

index(a, b, c)其实相当于创建了三个索引:
index(a)、index(a, b)、index(a, b, c),
所以创建了联合索引index(a, b, c),就没必要重复创建index(a)这种索引了,还会增加维护索引的开销

8. 联合索引最左匹配原则

乘上,
a. where条件是select name from table where b = 2, 这种时候就不会命中索引;
b. select select name from table where b = 2 and a =3,这个时候就会命中索引,注意最左匹配原则的最左所代码的顺序是索引定义时的顺序,而不是执行语句的顺序,因为mysql优化器会调整sql语句的,语句真正执行时候的样子并不是你写的样子;
c. 遇上判断等,索引会失效,但不是全部失效,而是定义时排在后面的索引会失效,比如:select name from table where b = 2 and a > 3 and c =4 那么a、b条件会命中索引,c不会;

9. 回表 索引覆盖 聚簇索引 非聚簇索引

回表:索引中的数据不够你用的,需要再去库中查;
索引覆盖:索引中的数据够你用的了,不需要回表到库中查了;
聚簇索引:回表时其实是根据主键去查数据,也就是说,索引中存储的是主键的地址和其他一些索引值,当你需要的值不在这个范围内,则需要根据主键地址回表查数据,聚簇索引指的就是索引中存储的是主键地址,需要更多数据时再根据主键去查数据的这种关系,可以认为聚簇索引就是主键相关
非聚簇索引:非主键索引

10. 前缀索引 前缀系数注意点

前缀索引的前缀系数的计算要注意字段的数据类型,当是varchar时,前缀系数指的就是字符数,但当字段类型是二进制,前缀系数指的就是字节数了,这个时候一般一个汉字三个字节,一个英文字母一个字节,当然不同的字符集也有区别

11. collate 可以设置mysql区分大小写

不建议使用,最好使用mysql默认的不区分大小写

12. explain cost

相比于explain 中的type来判断索引的使用情况,cost所指代的io和cpu花费情况更能反应一个sql语句的好坏

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

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

相关文章

这下真的是阳了个阳!

实际情况 很不幸&#xff0c;在前天&#xff0c;出现了新冠阳性的症状&#xff0c;随后用抗原检测了下&#xff0c;有阳的条带出现&#xff08;很浅&#xff0c;弱阳&#xff0c;因为才出现症状&#xff09;&#xff0c;基本上就是确定阳了。 抗原检测不知道今天是第几天了&…

第40篇 网络(十)WebKit初识

导语 WebKit是一个开源的浏览器引擎。Qt中提供了基于WebKit的QtWebKit模块&#xff0c;它包含了一组相关的类。QtWebKit提供了一个Web浏览器引擎&#xff0c;使用它便可以很容易的将万维网&#xff08;WorldWide Web&#xff09;中的内容嵌入到Qt应用程序中。与此同时&#xf…

大二Web课程设计——基于HTML+CSS+JavaScript+jquery手表商城购物网站(17页)

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

无人机集群的分布式协作 VI-SLAM

以下内容来自从零开始机器人SLAM知识星球 每日更新内容 点击领取学习资料 → 机器人SLAM学习资料大礼包 #论文# D2SLAM: Decentralized and Distributed Collaborative Visual-inertial SLAM System for Aerial Swarm 论文地址&#xff1a;https://arxiv.org/abs/2211.01538…

视频怎么转文字?快把这些方法收好

如今短视频让知识传播变得越来越简单&#xff0c;我们可以很轻松的就通过短视频了解到大量的知识要点。但是当我们想要回温知识点的时候&#xff0c;需要重新观看视频&#xff0c;这就有些不太便利。其实我们可以通过将视频转成文字&#xff0c;这样子就容易归纳知识点了。那你…

Jlink commander使用方法(附指令大全)

Jlinkcmd它可以方便用户在非仿真的情况下&#xff0c;hold内核、单步、全速、设置断点、查看内核和外设寄存器、读取flash代码等等&#xff0c;方便大家拥有最高的权限查看在运行中的MCU情况&#xff0c;查找非IDE仿真情况下&#xff0c;MCU运行异常的原因。 目录 驱动安装 …

粉笔科技张小龙:能传授知识文化和技能,就是对社会的贡献和交代

粉笔科技张小龙在一次粉笔科技的管培生大会上强调&#xff0c;今天是互联网时代&#xff0c;你只有为别人提供价值&#xff0c;提供更高品质的价值&#xff0c;以及更高效率的提供价值&#xff0c;你才有价值。一个企业是这样&#xff0c;一个人也是这样。#张小龙# 你把事情做到…

微服务框架 SpringCloud微服务架构 分布式缓存 42 Redis 主从 42.4 数据同步原理【优化】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式缓存 文章目录微服务框架分布式缓存42 Redis 主从42.4 数据同步原理【优化】42.4.1 主从同步的问题优化42.4.2 总结42 Redis 主从 42…

QA | SWCF2022 笔记:C波段卫星与5G之间的干扰排查及解决方案

2022年度SWCF卫星通信与仿真测试研讨会正在进行中。昨日精彩演讲&#xff1a;C波段卫星与5G之间的干扰排查及解决方案&#xff0c;昨晚收到一些粉丝的技术问题&#xff0c;我们汇总了热点问题并请讲师详细解答。 演讲主题&#xff1a;C波段卫星与5G之间的干扰排查及解决方案 干…

龙芯内核的UOS安装 Mariadb-server

1.安装 Mariadb-server 1.1安装配置 sudo apt install mariadb-server启动数据库 systemctl start mariadb;设置数据库自启动 systemctl enable mariadb;对数据库进行一些设置 mysql_secure_installation输入当前密码&#xff08;因为是第一次安装&#xff0c;没有密码&am…

基于Android的应用市场软件的设计

基于Android的应用市场软件的设计 摘  要 随着智能手机的普及&#xff0c;人们越来越依赖手机进行一系列操作。 由于Android系统是一款免费的操作系统&#xff0c;导致了使用Android系统的手机占到7成左右。为了让Android手机用户体验更好&#xff0c;就需要让Android手机用…

【linux】之私有云OpenStack手动分布式部署

一、环境准备 参考: https://docs.openstack.org/zh_CN/install-guide/ 1, 静态IP(NetworkManager服务可以关闭) 2,主机名与绑定 192.168.122.11 controller 192.168.122.12 compute 192.168.122.13 cinder3, 关闭防火墙和selinux 4, 时间同步 所有节点准备yum源 # yum …

12.6、后渗透测试--Windows系统下信息收集模块

一、存活主机发现 步骤1、使用arp查看缓冲表&#xff1a;meterpreter > arp步骤2、局域网内存活主机发现&#xff1a;meterpreter > run post/windows/gather/arp_scanner RHOSTS172.16.0.0/24二、应用程序枚举 方法1&#xff1a; 获取靶机上的软件安装信息meterpreter…

免费刷题的软件测试面试题库小程序,萌新必备

现如今&#xff0c;不仅学习卷、考证卷&#xff0c;就连找工作也开始卷得没边了。就如最近几年新崛起的软件测试岗位&#xff0c;很多人为了能过快速通过面试&#xff0c;或者拿到offer&#xff0c;纷纷在面试前几周左右&#xff0c;不惜花重金&#xff0c;购买面试题目&#x…

【总结】有三AI所有原创GAN相关的学习资料汇总(2022年12月)

GAN的研究和应用在这几年发展可以说是非常迅猛&#xff0c;无疑是这几年深度学习计算机视觉领域里落地性最酷的技术之一&#xff0c;包括图像与视频生成&#xff0c;数据仿真与增强&#xff0c;各种各样的图像风格化任务&#xff0c;人脸与人体图像编辑&#xff0c;图像质量提升…

高分子PEGDBCO-PEG-Acrylates,DBCO-PEG-ACRL,二苯并环辛炔PEG丙烯酸酯

●外观以及性质&#xff1a; DBCO-PEG-ACRL产物呈固体或粘性液体&#xff0c;取决于PEG分子量“点击化学"一般由叠氮化物&#xff08;azide&#xff09;和炔烃&#xff08;alkyne&#xff09;作用形共价键&#xff0c;具有高效稳定&#xff0c;高特异性等优点。反应不受PH…

【Vue 快速入门系列】Vue中如何使用动画与过渡

文章目录前言一、回忆css3中的动画二、Vue中单标签使用动画1.默认使用方法2.自定义使用方法三、Vue中多标签实现动画效果四、使用第三方动画前言 本篇博客将会介绍如何在Vue中使用动画效果。 一、回忆css3中的动画 定义一个动画&#xff1a; 定义一个动画名为atguigu keyfr…

WhatWeb 网站指纹识别软件

一、WhatWeb介绍 WhatWeb是一个开源的网站指纹识别软件。WhatWeb识别网站。它的目标是回答“那个网站是什么&#xff1f;”这个问题。WhatWeb可识别Web技术&#xff0c;包括内容管理系统&#xff08;CMS&#xff09;&#xff0c;博客平台&#xff0c;统计/分析包&#xff0c;Ja…

数据库原理及MySQL应用 | 数据库安全加固

数据库安全至关重要&#xff0c;可从多方面对数据库进行加固。 数据库安全怎么强调都不过分&#xff0c;可以从以下方面对数据库进行加固&#xff0c;让它更安全。 01、操作系统级别 可从以下七方面实现操作系统级别的安全加固。 1. 使用数据库专用服务器 使用专用的服务器…

《大数据导论》之数据生命周期和数据使用

1 数据生命周期 数据都存在一个生命周期&#xff0c;数据生命周期是指数据从创建、修改、发布利用到归档/销毁的整个过程。 1.1 数据生命周期管理工作包括以下几个方面&#xff1a; 分类&#xff1a;对数据进行自动分类&#xff0c;分离出有效的数据&#xff0c;对不同类型数据…