mysql关联查询和查询优化

Mysql索引优化实践进阶 count(1)跟count(字段)执行过程类似,不过count(1)不需要取出字段统计,就用常量1做统计,count(字段)还需要取出字段,所以理论上count(1)比count(字段)会快一点。count(*) 是例外,mysql并不会把全部字段取出来,而是专门做了优化,不取值,按行累加,效率很高,所以不需要用 count(列名)或count(常量)来替代 count(*)。并且 join_buffer 里的数据是无序的,因此对表 t1 中的每一行,都要做 100 次判断,所以内存中的判断次数是。 阅读详情

mysql关联查询

 参考:https://blog.youkuaiyun.com/lu0422/article/details/78892497

mysql查询慢的原因

  • 记录慢查询日志
    分析查询日志,不要直接打开慢查询日志进行分析,这样比较浪费时间和经历,可以使用pt-query-digest工具进行分析
  • 使用show profile
    set profileing = 1;开启,服务器上执行所有语句会检测消耗的时间,存到临时表中
    show profiles
    show profile for query Query_ID

 show profiles  查看所有查询消耗 的时间

show profile for query Query_ID   查看某一条语句查询的具体消耗时间;

  • 使用show status
    show status会返回一些计数器,show global status 查看服务器级别的所有计数
    有时根据这些计数,可以猜测出那些操作代价较高或消耗时间多
  • show processlist
    观察是否有大量线程处于不正常的状态或特征
  • explain
    分析单条的SQL语句

  

mysql查询优化的方式

  • 访问数据太多会导致查询性能下降(不要用select *)
    • 确定MySQL服务器是否在分析大量不必要的数据行
    • 确定应用程序是否在检索大量超过需要的数据,可能是太多行或列
    • 避免使用如下SQL语句
      • 查询不需要的数据,使用limit解决
      • 所表关联返回全部列,制定A.id,A.name,B.age
      • 总是取出全部列,SELECT * 会让优化器无法完成索引覆盖扫描的优化
      • 重复查询相同的数据,可以缓存数据,下次直接读取缓存
    • 是否在扫描额外的记录
      • 使用explain来进行分析,如果发现查询需要扫描大量的数据但是只返回少数行可以用如下技巧去优化:
        • 使用索引覆盖扫描,把所有用的列都放在索引中,这样存储引擎不需要回表获取对应行就可以返回结果
        • 改变数据库的表的结构,修改数据表范式(如果经常需要关联查询,可将另一张表的字段冗余地存储在要查询的表中,以空间换取时间)
        • 重写SQL语句,让优化器可以以更优的方式执行查询
  • 优化长难的查询语句
    • 切分查询
      将一个大的查询分为多个小的相同的查询
    • 分解关联查询
      可以将一条关联查询分解成多条SQL来执行,可以让缓存的效率更高,执行单个查询可以减少锁的竞争,在应用层做关联可以更容易对数据进行拆分,查询效率会有大幅提升,较少冗余记录的查询
  • 优化特定类型的查询语句
    • 优化count()查询
      • count(*)中的*会忽略所有的列,直接统计所有列数,因此不要使用count(列名)
      • MyISAM中,没有任何WHERE条件的count(*)非常快,当有WHERE条件时,MyISAM的count统计不一定比其他表引擎快
      • 可以使用explain查询近似值,用近似值代替count(*)
      • 增加汇总表
      • 使用缓存
    • 优化关联查询
      • 确定ON 或者 USING子句的列上有索引

        Mysql 中联接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name。
        当模式设计对联接表的列采用了相同的命名样式时,就可以使用 USING 语法来简化 ON 语法,格式为:USING(column_name)。

      • 确保GROUP BY 和 ORDER BY中只有一个表中的列,这样MySQL才能使用索引
    • 优化子查询
      • 用关联查询替代
    • 优化GROUP BY 和 DISTINCT
      • 这两种查询均可以使用索引来优化,是最有效的优化方法
      • 关联查询中,使用表示列进行分组的效率会更高(尽量使用主键、自增列等)
      • 如果不需要ORDER BY ,进行GROUP BY 时使用ORDER BY NULL ,mysql不会再进行文件排序
    • 优化LIMIT分页
      • LIMIT偏移量大时,查询效率低
      • 可以记录上次查询的最大ID,下次查询时直接根据该ID来查询
    • 优化UNION查询
      • UNION ALL查询效率高于UNION

引用的连接:https://www.cnblogs.com/clannadxr/p/7806090.html

引用的连接:https://blog.youkuaiyun.com/qq_35571554/article/details/82800463

 

深入解析WIFI与蓝牙模块电路设计:从原理到实战 本文深入解析了WIFI与蓝牙模块的电路设计,从核心原理到实战应用。文章以AP6256模块为例,详细拆解了电源树、时钟电路、接口设计及天线射频路径等关键环节,并提供了PCB布局布线的实用准则与调试方法,旨在帮助硬件工程师设计出稳定可靠的无线产品,规避常见陷阱。 阅读详情

相关推荐

初识机会网络仿真器ONE中ExternalMovement移动模型(导入外部移动数据)

最近半个月一直在研究ONE中关于ExternalMovement移动模型的源代码,在网上几乎没有找到相关的资料,很是苦恼,如果有共同研究方向的小伙伴欢迎联系我,共同讨论进步。 下面记录一下几点感悟: 1、使用外部数据的前提是在ONE的配置文件中增加及修改相关代码: Group.movementModel = ExternalMovement ExternalMovement.file = move...

qq_36974792的博客 657

mysql 多表关联查询如何改进

在进行多表关联查询时,可以通过使用正确的连接类型、优化 WHERE 子句、为关联字段创建索引、减少查询的字段、考虑使用分布式查询、尽量避免子查询、优化连接顺序、利用 EXPLAIN 分析查询、分解复杂查询和使用视图或存储过程等方法来提高查询性能。

洪晓鸿 6441

基于R语言的DICE模型实践技术应用;预测不同减排路径下的经济增长、碳排放量、气候变化程度以及社会福利变化

DICE模型是一个动态综合气候经济模型,由诺贝尔经济学奖得主William Nordhaus开发,用于评估气候变化对经济的影响以及不同减排政策的经济成本和效益。以下是一个关于DICE模型在气候变化影响评估中的实际应用案例,结合R语言代码进行讲解。

KY_chenzhao的博客 867

MySQL(五)——MySQL索引优化实战(多表联查优化)

MySQL索引优化实战(多表联查优化)

yemuxiaweiliang的博客 4078

DOTween回调函数的隐藏技巧:优化你的Unity动画流程

本文深入探讨了DOTween回调函数在Unity动画开发中的高级应用技巧,帮助开发者优化动画流程。通过分析回调机制、链式应用模式和大规模动画系统管理,提升性能与可维护性,特别适合需要高效处理复杂动画场景的Unity开发者。

weixin_27945229的博客 319

2021 buaa 计组上机P0 logisim 3道课上考试题

每年题目都不一样,但看看往年题可以帮助查缺补漏 第一题:组合逻辑设计 4人(1个组长和3个组员)对议题进行投票表决。组长有一票否决权。如果组长一票否决,则议题被否决。如果组长正常投票(同意、反对或者弃权),则统计同意的人数和反对的人数。当同意人数大于反对人数,则议题通过,否则议题被否决。 请设计组合逻辑电路,实现这样子的一个投票表决器 同意 反对 弃权 一票否决 组长信号 00 01 10 组员信号 00 01与11 10 第2题 时序逻辑电路设计 设计一个Mealy型电路,若序列的

weixin_41892813的博客 3457

Mysql 多表联查优化

一、尽量避免使用子查询 二、尽量避免在where 字句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描 三、in 和 not in 也要尽量避免使用,否则会导致全表扫描(对于连续的字段可以使用between and;也可以使用exists代替in) 四、尽量使用数字型字段,若只含数值信息的字段尽量不要设置为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为迎请在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型二闫只需要比较一次就够了。 五、尽量使用表变量来代替

weixin_55347832的博客 6799

华中农业大学C++考试基础练习题

实验一 1 通过日期求某月的天数。 输入日期的年份和月份,求该月有多少天。提示:对于月份为1、3、5、7、8、10、12的月份天数为31,月份为4、6、9、11的月份天数为30,月份为2时要结合年份考虑闰年的情况。 输入描述 输入两个正整数y和m分别表示年份和月份。 输出描述 如果y和m满足条件:1900<=y<3000,0<m<13,输出该月的天数;否则输出“Input error!”。 输入样例 2010 12 输出样例 31 #include"iostream" using n

雨的博客 1万+

MySQL 内连接、外连接与索引优化实战

本文介绍了SQL表连接的分类、底层机制及优化方案。表连接分为内连接和外连接(左外、右外、全外),其中外连接明确区分驱动表与被驱动表。底层执行时,驱动表每条记录都会与被驱动表全表匹配,时间复杂度为O(n²)。优化方案包括:1)小表驱动大表减少匹配次数;2)为被驱动表连接字段添加索引,将复杂度降至O(nlogn);3)为WHERE条件字段加索引;4)确保连接字段类型一致避免隐式转换。内连接中,查询优化器会自动选择数据量小的表作为驱动表,建议在数据量大的被驱动表常用字段上建立索引。

m0_70325779的博客 902

CESM笔记——CESM1.0-CESM1.2.2-CESM2.1.3三个版本模式工作流对比

最近测试了CESM1.0,CESM1.2.2和CESM2.1.3三个版本,不同版本在workflow上有一些区别,来做点笔记。 CESM1.0 测试compset:B_2000,F_2000 workflow: 1. create_newcase -case ~/CESM/cesm1_0/script/B_2000 -compset B_2000 -res f19_g16 -mach tianhe 2. cd B_2000 (optional) env_mach_pes.xml ##修改核数,

砍柴姑娘Jourosy的博客 4944

第十六章:载板制造工艺大全

本文详细介绍了IC载板制造的完整工艺流程,主要包括开料、钻孔、孔金属化、图形形成、层压、表面处理、成型和电测8大工序。每个工序都列出了关键参数和质量控制要点,如开料尺寸精度±0.1mm、激光钻孔孔径50-150μm、孔金属化铜厚20-30μm、图形形成线宽15μm±2μm等。文中还特别说明了MSAP工艺和沉金等特殊工艺的详细流程,以及成型精度和电测标准等关键指标。全文通过流程图和参数表格直观展示了IC载板制造的核心工艺和质量要求。

Open 184

MySQL关联查询如何优化

前面讲了原理,从原理出发,讲一下优化的建议被驱动表的连接字段建立索引,因为建立索引的查询方式是效率最高的。left join 或者 right join 这种外连接的情况,要保证小表(小结果集)作为驱动表,大表(大结果集)作为被驱动表,这样性能更好。在查询字段的话,要避免写出 select * ,而是根据业务需要,需要查询出来的 select 出来就行,因为这些字段也会加入到 join buffer 中,减少额外的内存消耗。能够直接多表关联的尽量直接关联,不用子查询,因为子查询的效率更加低。

清晨qc的博客 2892

VCAST创建单元测试工程

选择工作目录,后面创建胡UT工程将会生成到这个目录。

qq_42851449的博客 2482

MySQL高级篇——关联查询和子查询优化

左外连接:优先右表创建索引,连接字段类型要一致、内连接:驱动表由数据量和索引决定、 join语句原理、子查询优化:拆开查询或优化成连接查询

种一棵树最好的时间是十年前,其次是现在 4181

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

MySQL 多表关联查询优化实践和原理解析

MySQL 多表关联查询优化实践和原理解析

kerwin的博客 8708

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

MySQL高级第八篇:关联查询、子查询和排序相关优化

子查询是MySQL的一项重要的功能,可以帮助我们通过一个SQL语句实现比较复杂的查询。但是,子查询的执行效率不高。,即一个SELECT查询的结果作为另一个SELECT语句的条件。,其速度比子查询要快,如果查询中使用索引的话,性能就会更好。在MySQL中,可以使用连接(JOIN)查询来替代子查询。使用子查询可以进行SELECT语句的。大大增加了1O的次数。

I wanna be myself, where I Belong. 2075

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

关联查询和多次查询的点 以及 MySQL慢查询优化 EXPLAIN详解

A,B两个表数据规模十几万,数据规模都不大,单机MySQL够用了,在单机的基础上要关联两表的数据,先说一个极端情况,A,B两个表都没有索引,并且关联是笛卡尔积,那关联结果会爆炸式增长,可能到亿级别,这个时候网络IO成了瓶颈,这个时候两次十万行结果集的拉去可能远小于1次亿级别的结果集的拉取,那么将关联合并拉到service层做更快。但实际业务中一般不会有这么蠢的行为,一般关联会有连接条件,并且连接条...

scofen的博客 4437

Mysql(五)索引优化 常见的分页场景优化技巧 Join关联查询优化 in和exsits优化 count(*)查询优化

前言 常见的分页场景优化技巧: 根据自增且连续的主键排序的分页查询 根据非主键字段排序的分页查询 Join关联查询优化 嵌套循环连接 Nested-Loop Join(NLJ) 算法 基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法 被驱动表的关联字段没索引为什么要选择使用 BNL 算法而不使用 Nested-Loop Join ? 关联sql的优化 straight_join: in和exsits优化 count(*)查询 常见优化方法

T_Antry 2779

MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化

文章目录①. 分页查询优化②. Join关联查询优化③. in和exsits优化④. count(*)查询优化 ①. 分页查询优化 ①. 坏境准备 表示从表 employees 中取出从 10001 行开始的 10 行记录。看似只查询了 10 条记录,实际这条 SQL 是先读取 10010 条记录,然后抛弃前 10000 条记录,然后读到后面 10 条想要的数据。因此要查询一张大表比较靠后的数据,执行效率是非常低的 示例表: CREATE TABLE `employees` ( `id` int(1

所得皆惊喜 801

MySQL中的limit的优化延迟关联和边界查询

explain select * from ph_member limit 4000,10 1 SIMPLE ph_member ALL 10705 100 使用时间为0.006s #延迟关联 explain select * from ph_member INNER JOIN (select id from ph_...

wd521521的博客 581

Join关联查询优化

整个过程会读取 t2 表的所有数据(扫描100行),然后遍历这每行数据中字段 a 的值,根据 t2 表中 a 的值索引扫描 t1 表中的对应行(扫描100次 t1 表的索引,1次扫描可以认为最终只扫描 t1 表一行完整数据,也就是总共 t1 表也扫描了100行)。驱动表是 t2,被驱动表是 t1。当使用left join时,左表是驱动表,右表是被驱动表,当使用right join时,右表时驱动表,左表是被驱动表,当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表。

qq_33221273的博客 841

mysql 数据库join关联查询using(xxx)、原理解析和优化

mysql 数据库join关联查询using(xxx)、原理解析和优化,左外,右外关联查询。等效inner join

m0_58441715的博客 527

Join关联查询、in和exists、count()优化

Join关联查询、in和exists、count()优化

Soil_Three_66的博客 983

《深入解析MySQL性能优化:分页查询与关联查询实战技巧》

本文详细介绍了在MySQL中进行分页查询的优化方法,以及如何高效地使用Join进行关联查询。文章通过创建示例表,分析了数据类型和字段长度对查询性能的影响,并提供了实用的优化技巧,帮助读者在实际项目中提升数据库查询效率。

2301_81724645的博客 891

05-Mysql索引优化实战二

在决定哪个表做驱动表的时候,应该是两个表按照各自的条件过滤,过滤完成之后,计算参与 join 的各个字段的总数据量,数据量小的那个表,就是“小表”,应该作为驱动表。

k_aikai的博客 1723

Mysql索引优化实战(二)

所以,在存储数据时,如果存入值小于等于255,如200,虽然超过2位,但是没有超出TINYINT类型长度,所以可以正常保存;当使用left join时,左表是驱动表,右表是被驱动表,当使用right join时,右表时驱动表,左表是被驱动表,当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表。count(*) 是例外,mysql并不会把全部字段取出来,而是专门做了优化,不取值,按行累加,效率很高,所以不需要用count(列名)或count(常量)来替代 count(*)。

EverythingAtOnce的博客 1123
上一篇: mysql索引学习
下一篇: yii2缓存
QinAction
博客等级 码龄11年 20粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值