MySQL优化查询性能的常用方法

MySQL之查询性能剖析与优化全攻略 大家好!一直以来,我都盼着能和各位在技术领域共同学习、共同进步。在MySQL的使用过程中,查询性能优化可是个关键问题,它直接关系到整个系统的运行效率。今天,咱们就深入研究一下MySQL查询性能剖析的相关知识,希望能帮大家掌握优化查询性能的方法,在技术道路上更进一步。 阅读详情

本文为《高性能MySQL(第三版)》一书的摘要总结

优化数据访问

如果要优化查询,实际上是要优化其子任务,要么要出其中一些子任务,要么减少子任务的执行次数,要么让子任务运行的更快。

查询性能低下最基本的原因是访问的数据太多。对于低效的查询,下面两个步骤的分析总是很有效:

  • 确认应用程序是否在检索大量超过需要的数据。这意味着访问了太多行后者列。
  • 确认MySQL服务器层是否在分析大量超过需要的数据行。

是否向数据库请求了不需要的数据

查询不需要的记录

如果我们不需要展示全部记录,最好在查询后加上LIMIT。

多表关联时,返回全部列

例如,我们要查询一个员工的工号,姓名,和所以部门名称:

select
	*
from
	employees e
inner join dept_emp ed
		using (emp_no)
inner join departments d
		using(dept_no);

上面的查询会返回三个表的全部列,尽量不要这样查询,我们应该指定查询的列:

select
	e.emp_no ,e.first_name ,e.last_name ,d.dept_name
from
	employees e
inner join dept_emp ed
		using (emp_no)
inner join departments d
		using(dept_no);

总是取出全部列

每次看到SELECT *时,都要用怀疑的眼光来审视。我们需要根据实际情况来判断是否真的需要查询所有的列,取出全部的列,我们无法完成 索引完全覆盖 这样的优化,还会对服务器资源带来额外消耗。

重复查询相同的列

如果存在重复查询,我们可以将这个查询结果缓存。

MySQL是否在扫描额外的数据

在确定查询只返回需要的数据 之后,接下来应该看看查询为了返回这些结果是否扫描了过多的数据。

对于MySQL,最简单的衡量查询开销的三个指标:

  • 响应时间
  • 扫描的行数
  • 返回的行数

这三个指标都会记录到慢日志中,所以 检查慢日志记录 是找出扫描行数过得的查询的好办法。

响应时间

响应时间 = 服务时间 + 排队时间。

扫描行数和返回的行数

分析查询是,查看扫描的行数是非常有帮助的,这在一定程度上说明了该查询找到需要的数据的效率。

扫描行数与访问类型

在EXPLAIN语句中的type反应了访问类型,访问类型有很多,从全表扫描到索引扫描、范围扫描、唯一索引查询、常数引用等。这里的类型速度从慢到快,扫描的行数从多到少。

如果发现查询需要扫描大量的数据但只返回少量的行,可以通过以下方式进行优化:

  • 使用索引覆盖扫描。
  • 改变库表结构,如使用单独的汇总表。
  • 重写这个复杂的查询。

重构查询的方式

一个复杂查询还是多个简单查询

在传统实现中,总是强调需要数据库完成尽可能多的工作。但是对于MySQL而言,这并不适用,MySQL从设计上让连接和断开连接都非常轻量级,在返回一个小的查询结果方面很高效。

如果将一个复杂的查询拆分成多个简单查询对应用更友好,能减少更多的工作,就不要害怕这样做。

切分查询

我们可以将一个大的查询“分而治之”,将大查询分成小查询,每个小查询 功能相同,只完成一小部分,每次只返回一小部分查询结果。这样可以减轻服务器负担,避免一次性锁住很多数据,占用过多事务日志等。

如果是事务性引擎,很多时候小事务可能更高效

分解关联查询

很多高性能的应用都会对关联查询进行分解:可以对每一个表进行一次单标查询,然后将结果在应用程序中进行关联。如:

select
	e.emp_no ,
	e.first_name ,
	e.last_name ,
	d.dept_name
from
	employees e
inner join dept_emp ed
		using (emp_no)
inner join departments d
		using(dept_no)
where
	e.first_name = 'Mary'

可以分解为:

select e.emp_no,e.first_name,e.last_name from employees e where e.first_name = 'Mary';
select d.dept_no from dept_emp de where de.emp_no = 10011;
select d.ept_name from departments d where d.dept_no = 'd009';

分解关联查询的方式重构查询有如下优势:

  • 让缓存的效率更高。不管是应用程序缓存还是MySQL查询缓存,对单表查询结果进行缓存,都将提高缓存的利用率。
  • 将查询分解后,执行单个查询可以减少锁的竞争。
  • 在应用层做关联,可以更容易对数据库进行拆分,更容易做到高性能和可扩展。
  • 查询本身效率也可能会有所提升。(单表查询更容易实现顺序查询,这可能比随机的关联更高效)
  • 可减少冗余记录的查询。在应用层做关联,意味着对于某条记录应用只需要查询一次;而在关联查询中,可能需要重复的查询某一部分数据。
  • 这样做相当于在应用中实现了 哈希关联。

在如下场景中,将关联放在应用程序中将会更加高效:

  • 当应用能够方便的缓存单个查询结果时;
  • 当可以将数据分布到不同的MySQL服务器上时;
  • 当能够用IN()的方式代替关联查询的时候;
  • 当查询中使用同一个数据表的时候。

查询执行的基础

如果我们弄清楚MySQL是如何优化和执行查询的,我们就可以理解:很多查询优化工作实际上就是遵循一些原则让优化器能够按照预想的合理的方式运行。

MySQL查询执行过程:

MySQL客户端/服务端通信协议

MySQL客户端/服务端通信协议是 半双工 的,这种协议让MySQL通信变得简单,但是也从很多地方限制了MySQL。一个明显的限制就是无法进行 流量控制 ,一单一端开始发生消息,另一端要接收完整的消息之后才能响应它。

客户端用 一个 单独的数据包将查询传给服务器。这也是为什么当查询语句很长时,参数max_allowd_packet就特别重要了。

相反,服务器响应给于鸿鹄的数据通常较多,由 多个 数据包组成。客户端必须完整的接受整个返回结果,所以查询中使用LIMIT限制是十分有意义的。

MySQL通常需要等所有的数据都已经发送给客户端才能释放这条查询所占用的资源。所以缓存通常可以减少服务器压力,让查询早点结束、早点释放响应的资源。

查询状态

对于一个MySQL连接,或者说一个线程任何时候都有一个状态,该状态表示了MySQL当前正在做什么。我们可以查询通过SHOW FULL PROCESSLIST命令结果中的Command列来查看连接的当前状态:

show  full processlist;
IdUserHostdbCommandTimeStateInfo
4event_schedulerlocalhostDaemon172374Waiting on empty queue
273develop192.168.1.4:56494employeesSleep11306
274develop192.168.1.4:56495employeesSleep7230
275develop192.168.1.4:56496employeesQuery0starting/* ApplicationName=DBeaver 7.1.0 - SQLEditor <Script.sql> */ show processlist
  • Sleep: 线程正在等待客户端发送新请求。
  • Query:线程正在执行查询或者正在将结果发送给客户端
  • Locked:在MySQL服务器层,该线程正在等待 表锁
  • Analyzing and statistics:线程正在搜集存储引擎的统计信息,并生成查询的执行计划
  • Copying to tmp table [on disk]: 线程正在执行查询,并且将其结果集都复制到一个零时表中,这种状态一般要么是在做GROUP BY操作,要么是文件排序操作,或者是UNION操作。
  • Sorting result:线程正在对结果集进行排序。
  • Sending data:线程可能在多个状态之间传送数据,或者在生成结果集,或者在向客户端返回数据。

查询缓存(Query Cache)

如果查询缓存是打开的,那么在解析一个查询语句之前,MySQL会优先检查这个查询是否命中查询缓存中的数据。检查是通过一个大小写敏感的哈希查找实现的。如果当前缓存命中了查询缓存,那么在返回查询结果之前MySQL会检查一次用户权限。如果权限没有问题,将直接从缓存中拿到结果并返回给客户端。

查询优化处理

语法解析器和预处理器

首先,MySQL通过 关键字 将SQL语句进行解析并生成一颗对应的“解析树”。MySQL解析器将使用MySQL语法规则 验证和解析查询。例如关键字是否正确,关键字的顺序是否正确等。————语法合法性

然后,预处理器则根据一些MySQL规则进一步检查解析树是否合法。例如,检查数据表和数据列是否存在,表别名是否有歧义等。————表结构合法性

然后,预处理器还要验证权限。

查询优化器

优化器将合法的语法树转化为 执行计划。一条查询有多种执行计划,优化器的作用就是找出最好的执行计划。

查询优化器能够优化的一些类型:

  • 重新定义关联表的顺序
  • 将外连接转换成内连接

当外连接与内连接等价时

  • 使用等价变化规则
  • 优化COUNT(),MIN()和MAX()

MIN():B-Tree索引第一个节点

MAX():B-Tree索引最以后一个节点

没有Where条件的COUNT():使用存储引擎提供的一些优化(存储表行数的变量)

  • 预估并转化为常数表达式

当一个表达式(甚至是一个查询)可以转化为一个常数时

  • 覆盖索引扫描

  • 子查询优化

减少多个查询多次对数据进行访问

  • 提前终止查询

当知道已经满足查询需求时,MySQL总是能够立即终止查询。发现一个不成立条件就立即结束。

  • 等值传播

如果两个列通过等式关联,那么MySQL能够吧其中一个列的WHERE条件传递给另一个列

select
	e.emp_no ,
	e.first_name ,
	e.last_name ,
	d.dept_name
from
	employees e
inner join dept_emp ed
		using (emp_no)
inner join departments d
		using(dept_no)
where
	e.emp_no = 10001;

将会优化为:

select
   e.emp_no ,
   e.first_name ,
   e.last_name ,
   d.dept_name
from
   employees e
inner join dept_emp ed
	   using (emp_no)
inner join departments d
	   using(dept_no)
where
   e.emp_no = 10001
   and ed.emp_no = 10001;
  • 列表IN()的比较

MySQL将IN()列表中的数据先排序,然后通过二分查找的方式来确定列表中的值是否满足条件。

MySQL关联查询

MySQL认为任何一次查询都是一次“关联”,MySQL的关联执行策略是 嵌套循环关联操作。

执行计划

MySQL生成查询的指令树,然后通过存储引擎执行完成这可树的指令并返回结果。

我们对某个查询执行explain后,再执行SHOW WARNINGS,就可以看到重构出的查询。

关联查询优化器

通常情况下,查询优化器会选择最佳(嵌套循环最少)的表关联顺序进行查询,但是当关联的表十分多的时候,优化器就会使用“贪婪”搜索方式查找“最优”的关联顺序。

实际上,当需要关联的表超过optimizer_serch_depth的限制,就会选择“贪婪”索索模式了。

我们也可以在查询语句中使用STRAIGHT_JOIN关键字,使得优化器不优化表关联顺序。

select STRAIGHT_JOIN
   e.emp_no ,
   e.first_name ,
   e.last_name ,
   d.dept_name
from
   employees e
inner join dept_emp ed
	  using (emp_no)
inner join departments d
	  using(dept_no)
where
   e.emp_no = 10001
   and ed.emp_no = 10001;

排序优化

当MySQL不能通过索引得到排序结果时,就需要自己进行排序,如果数据量小就在内存中进行,如果数据量大则需要使用硬盘,MySQL将这个过程称为 文件排序(filesort)。

如果需要排序的数据量小于“排序缓冲区”,MySQL使用内存进行“快速排序”操作。如果内存不够排序,那么MySQL会先将数据分块,对每个独立的块使用“快速排序”进行排序,并将各个快的排序结果放在磁盘上,然后将各个排好序的块进行合并,最后返回排序结果。

MySQL有如下两种排序算法:

  • 两次传输排序(旧版本使用):

读取行指针和需要排序的字段,对其进行排序,然后在根据排序结果读取所需数据行。该算法在第二次读取数据时会造成大量的随机I/O,所以两次传输排序的数据传输成本非常高。但是这个算法在排序时存储尽可能少的数据,是的“排序缓冲区”中能够容纳更多的行数进行排序。

  • 单次传输排序(新版本使用)

    先读取查询所需的所有列,然后在根据给定列进行排序,最后直接返回排序结果。该算法的优缺点与两次传输相反。

当查询需要所有列的总长度不超过max_length_sort_data时,MySQL会使用“单次传输排序”,我们可以通过调整该参数来影响MySQL排序算法的选择。

在关联查询的时候如果需要排序:

  • 如果ORDER BY子句的所有列都来自关联的第一个表,那么MySQL在关联处理第一个表的时候就会进行文件排序。这种情况下,EXPLAIN 的Extra字段可以看到"Using filesort"。

  • 除去第一种情况的其它情况,MySQL都会先将关联的记过存放在一个临时表总,然后再所有的关联结束后,再进行文件排序。XPLAIN 的Extra字段可以看到"Using temporary;Using filesort"。

如果有LIMIT,LIMIT也会在排序之后应用,所以即使需要返回较少的数据,临时表和需要排序的数据量任然会非常大。

查询执行引擎

MySQL的查询执行引擎根据执行计划给出的指令逐步执行,在执行计划逐步执行的过程中,大量的操作需要通过调用存储引擎实现的接口来完成。

返回结果给客户端

查询执行的最后一个阶段是将结果返回给客户端。如果查询可以别缓存,那么查询结果也在这个阶段被存放到查询缓存中。

MySQL将结果返回给客户端是一个增量、逐步返回的过程。如关联查询,一旦查询处理完最后一个关联表,开始生成第一条结果是,MySQL就可以开始向客户端逐步返回结果集了。这样做有两个好处:

  • 服务器端无需存储太多结果
  • 客户端可以在第一时间得到返回的结果。

结果集中的每一行都会以满足MySQL客户端/服务器通信协议的封包发送,再通过TCP协议进行传输。

优化特定查询类型

优化COUNT()查询

统计列值时要求列值非空(列值为NULL的记录不被统计在内),统计行数就是统计结果集的行数,不会关注列值。

  • 简单的优化:

MyISAM的COUNT(*)函数在没有where条件时非常的快,因为它利用存储引擎的特性直接获取这个值。我们可以利用这个特性,来加速一些特定条件下的COUNT()查询:

如果一个统计需要扫描多半张表,那么我们可以将条件反转一下,统计其对立面,然后在用总数减去对立面数量:

select count(*) from employees e2 where e2.emp_no > 10005;
show status where variable_name = 'Handler_read_next ';

该统计语句需要扫描30023行数据。

select ((select count(*) from employees) - count(*) ) total from employees e2 where e2.emp_no  <= 10005;
show status where variable_name = 'Handler_read_next ';

这条查询只扫描了5行。因为子查询直接被当做常数来处理的:

idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1PRIMARYe2rangePRIMARYPRIMARY45100.0Using where; Using index
2SUBQUERYSelect tables optimized away
  • 同一个查询中统计同意列的不同值的数量:
select sum(if (first_name like 'A%',1,0)) as Aname,sum(if (first_name like 'B%',1,0)) as bname from employees_temp et ;
--或者
select sum(first_name like 'A%') as Aname,sum(first_name like 'B%') as bname from employees_temp et ;
--或者使用count(),只要将其条件设置为真
select count(first_name like 'A%' or null) as Aname,count(first_name like 'B%' or null) as Bname from et ;
  • 使用近似值

如果某些业务场景不要求完全精确的COUNT值,此时可以用近似值来代替。EXPLAIN出来的优化器估算的行数就是一个不错的近似值,执行EXPLAIN并不需要真正地去执行查询,所以成本很低。

  • 更复杂的优化

如果及时是索引覆盖扫描都不够的话,那么就需要考虑汇总表或者外部缓存系统了。

优化关联查询

  • 确保On或者Using子句中的列上有索引,且是第二个表的列上有索引。
  • 确保任何GOURP BY和ORDER BY中的表达式只涉及到一个表中的列。这样MySQL才有可能使用索引来优化这个过程。

优化子查询

在MySQL5.6之前,尽可能的使用关联查询,5.6及以后可以直接忽略这条建议。

优化LIMIT分页

当偏移量过大时,MySQL需要查询大量数据然后丢弃,十分影响性能,我们可以使用“延迟关联”来减少读取行数。

select emp_no ,first_name ,last_name from employees e limit 10000,20;
--
select emp_no ,first_name ,last_name from employees e1 join (select emp_no from employees e2 limit 10000,20 ) e3 using(emp_no);

优化UNION

我们经常需要将WHERE、LIMIT、ORDER BY等子句“下推”到UNION的各个子查询中,以便优化器可以充分的利用这些条件进行优化。

除非确实需要服务器消除重复的行,否则一定要使用UNION ALL.

优化MySQL数据库性能:减轻数据负担提升查询速度 综上所述,通过选择合适的数据类型、创建索引、优化查询语句、批量插入数据、避免频繁更新索引列以及定期优化数据库,我们可以减轻MySQL数据库的数据负担,提升查询速度和整体性能。这些方法可以根据实际需求进行灵活调整和组合,以达到最佳的数据库性能优化效果。在开发和管理应用程序时,数据库性能是至关重要的因素之一。MySQL是一种常用的关系型数据库管理系统,为了确保应用程序的高效性,我们需要采取措施来优化数据库性能。本文将介绍一些减轻数据负担以提升MySQL数据库查询速度的方法,并提供相应的源代码示例。 阅读详情

相关推荐

MySQL高频基本面试问题整理

总结大厂MySQL高频基本面试问题整理,用于快速查缺补漏

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 175万+

【详解】MySQL查询性能优化

目录1. 为什么查询会慢2.慢查询基础:优化数据访问2.1 是否向数据库请求了不需要的数据2.2 MySQL是否在扫描额外的记录3. 重构查询的方式3.1 切分大查询3.2 分解关联查询4. 查询优化器4.1 查询优化器的工作4.2 局限性5. 总结 1. 为什么查询会慢 如果把查询当作一个任务,那么它是由一系列子任务完成的 如果要优化查询,要么减少子任务,要么减少子任务的执行次数,让子任务更快...

xzzz2020的博客 674

在win10-wsl2(ubuntu)中安装jlink

在 官方下载linux版本的deb包拷贝到ubuntu的/home目录下(其他目录也可以),进行安装然后提示很多依赖缺失的错误,此时执行自动安装需要的依赖包再次重新安装就可以啦查看是否安装成功,输入JLink 再按下两次Table键,是否如下所示这样表示安装成功了。

yaq_30401的博客 3140

MySQL数据库查询性能优化的4个技巧干货

MySQL性能优化是一个老生常谈的问题,无论是在实际工作中还是面试中,都不可避免遇到相应的场景,下面博主就总结一些能够帮助大家解决这个问题的小技巧。SQL优化之前需要确认哪些SQL需要优化,这时就需要引起SQL性能分析工具,主要优化的是查询语句。

延宝小白马的博客 739

在linux上本地大模型部署与推理

您的Python脚本(客户端)可能在您的个人电脑上,而模型服务(服务器)在远程Linux服务器上。如果您的服务器有强大的NVIDIA GPU,并且您对性能有更高的要求(例如需要高吞吐量),vLLM是更好的选择。这种方式无需向公网暴露服务器端口,而是通过加密的SSH通道将服务器的端口“映射”到您的本地电脑上。我们将启动一个API服务器,它会加载您指定的模型,并等待您的代码前来调用。如果您直接在SSH窗口运行上面的命令,一旦您关闭窗口,服务就会停止。这是根据您的原始代码修改的版本,适配本地vLLM服务。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 2055

VSCode多文件C语言项目编译实战:从配置到运行

本文详细讲解了如何在VSCode中配置多文件C语言项目的编译环境。通过手把手教学,指导读者创建项目结构、编写代码,并重点深度配置task.json与launch.json文件,实现一键编译和调试所有C文件,解决常见的“undefined reference”等链接错误,提升开发效率。

g8f9d0s1a2的博客 1098

MySQL调优--05---多表查询优化、子查询优化、 ORDER BY优化、GROUP BY优化、分页查询优化

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录多表查询优化驱动表结论1.外连接左外连接: 左表为驱动表,右边为被驱动表2.内连接对于内连接来讲,如果表的连接条件中只能有一个字段有索引,则有==索引==的字段所在的表会被作为==被驱动表==出现。对于内连接来说,在两个表的连接条件==都存在索引==的情况下,会选择小表作为驱动表。“==小表驱动大表==”join语句原理 多表查询优化 驱动表结论 1.外连接 左外连接: 左表为驱动表,右边为被驱动表 2.内连接 对于内连接来

时光里的博客 2864

可微编程:当深度学习遇见物理定律,重塑科学计算新范式

本文探讨了可微编程如何将深度学习与物理定律相结合,重塑科学计算范式。通过自动微分技术,它将物理方程融入可微计算图,使模型在数据驱动的同时遵守物理约束。文章以神经常微分方程为例,阐述了其在连续系统建模、科学模拟器优化等领域的应用,并分析了当前面临的挑战与最佳实践路径。

weixin_29056145的博客 134

MySQL优化查询性能的常用方法有哪些?

优化MySQL查询性能是一个多方面的过程,涉及数据库设计、索引策略、查询编写以及服务器配置等多个方面。

qq_33240556的博客 668

基于smart_rtmp直播,最简单的部署手册

版本号 添加内容 修改时间 V1.0 新建 2021年12月30日 V1.1 增加网页播放 2021年12月31日 V1.2 增加是否可以多流和测试数据 2022年1月5日 目录 一、软件储备 1.推流软件:OBS 2.服务器流媒体软件:smart_rtmp 3.播放软件:Pot...

qq_28768477的博客 1万+

封神台靶场,为了小芳,冲之——cookie注入

第二个靶场 打开网站 找一下注入点 一般在新闻这种里面点开看看 先判断是否存在注入 有waf 尝试了很多方法绕过都没成功,/and/,aandnd,AnD等一系列都没绕过去,乌鸡鲅鱼 删掉id=169 发现 然后判断cookie注入 在搜索框输入 Javascript:alert(document.cookie=”id=”+escape(‘169’)); 然后弹窗了(其中 “id=” 取决URL中的id= escape中的数值也是URL中id=的值)返回刚刚的页面,把ID删除后一样能正常显示。说明服务器能

Wubuqing的博客 654

mysql常用sql查询语句优化方法,性能优化

1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t

请恕小僧斗胆,以所谓少林七十二绝技,来会一会中原各路英雄 249

YOLO26涨点改进| CVPR 2026 | 独家创新首发、特征融合改进篇 | 引入 LFSB 差分双维注意融合模块,通过交替特征融合与分离策略,能够精准区分目标特征,顶会助力YOLO26有效涨点

本文提出LSFB差分双维注意融合模块,用于改进YOLO26目标检测模型。该模块通过融合-分离交替策略和差分注意力机制,有效提升模型在复杂场景下的特征分离能力,特别是在处理重叠物体或反射干扰时表现优异。LSFB采用双向投影、双维注意力计算和跨流减法算子,实现特征共享与独立提取的平衡。实验表明,该模块能显著减少特征混淆,提高检测精度和鲁棒性。文章还详细介绍了模块实现的核心代码、YAML配置文件修改方法以及三种改进方案,为YOLO26模型性能提升提供了创新解决方案。

Ai缝合怪、助力小伙伴高效发论文 326

Mysql--实战篇--SQL优化(查询优化器,常用的SQL优化方法,执行计划EXPLAIN,Mysql性能调优,慢日志开启和分析等)

SQL查询优化是一个多方面的过程,涉及到索引设计、查询语句编写、表结构调整、数据库配置等多个方面。通过合理使用索引、优化查询语句、调整表结构和数据库配置,可以显著提高查询性能,减少资源消耗,并最终提升系统的响应速度。1、创建合适的索引:使用覆盖索引、组合索引、前缀索引等,确保查询能够高效地使用索引。2、优化查询语句:避免使用SELECT ,使用EXISTS替代IN,使用JOIN替代子查询,避免隐式类型转换,优化分页查询。3、优化表结构:选择合适的数据类型,使用分区表、垂直拆分表、水平拆分表等技术。

weisian的博客 3万+

C#串口通信从入门到精通(7)——整数/浮点数与二进制、八进制、十六进制之间的转换与C#实现

本文详细介绍由博主开发的DataConvert串口通信帮助类的用法,该帮助类涵盖了串口通信领域所有的数据转换方法,帮助大家快速编写串口通信程序!

qq_34059233的博客 2880

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

MySQL中优化sql语句查询常用的30种方法

MySQL中优化sql语句查询常用的30种方法

程序员养成日记 385

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

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

MySQL查询优化器的工作原理及优化方法

在实际应用中,通过采取索引优化、表分区、查询重写和优化、数据预取和查询缓存等方法,可以进一步优化查询性能,提高系统的整体响应速度。MySQL提供了查询缓存功能,可以将查询语句和对应的查询结果缓存起来,当下次相同的查询请求到来时,直接返回缓存的结果,减少数据库的访问次数。在解析和重写阶段之后,查询优化器将根据表的统计信息、索引信息和系统配置等,评估不同的执行计划,并选择最优的执行计划。索引是提高查询性能的重要手段之一。在优化查询时,可以通过分析查询语句的WHERE条件,选择适当的索引,或者创建新的索引。

vipfanxu的博客 443

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VC中sqlite的使用

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

如何在 MySQL 中处理和优化长时间运行的查询

长时间运行的查询可能会对 MySQL 数据库产生不良影响,因此需要采取相应的措施来处理和优化这些查询。可以通过优化查询语句、调整数据库参数、使用临时表和分区表等方式来提高查询性能,同时还可以通过数据库设计优化、服务器配置优化和 SQL 语句优化等方法来提高 MySQL 数据库的整体性能。此外,使用常用的 MySQL 性能优化工具可以帮助用户更好地分析和优化 MySQL 数据库的性能。在进行优化时,需要注意数据的一致性和完整性以及系统资源的使用情况。

我爱娃哈哈的专栏 1654

MySQL 常用30种SQL查询语句优化方法

MySQL 常用30种SQL查询语句优化方法

呆木弱鸡 402

mysql性能调优书籍_MySQL性能优化(来源于简书)

1、为查询优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例:// 查询缓存不...

weixin_42297810的博客 325

MySQL常用慢查询分析工具

MySQL提供的一种慢查询日志记录,用来记录在MySQL查询中响应时间超过阀值的记录具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。

xxaa1mmn的博客 719

MySQL性能优化

MySQL性能优化

yujie6171的博客 221

MySQL性能优化的最佳经验,随时补充

1、为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。 这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例: // ...

zjfeng的博客 37

项目中常用到的 19 条 MySQL 优化

点击上方关注 “终端研发部”设为“星标”,和你一起掌握更多数据库知识作者 |zhangqh链接 | segmentfault.com/a/1190000012155267关于MySQL优化方法,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂。偶尔看到SF,发现了这篇文章,总结得很经典,希望对大家今后开发中有帮助 。今天的文章共提到19条常用的M...

这个时代,作为程序员可能要学习小程序 372

浅谈MySQL中优化sql语句查询常用的30种方法

转载:https://www.cnblogs.com/lonnie/p/8320095.html

weixin_39801446的博客 385

mysql usleep_MySQL性能优化的最佳经验,随时补充

1、为查询优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例://查询缓存不开...

weixin_35410644的博客 173
上一篇: MySQL怎样创建高性能的索引
下一篇: JVM经典垃圾收集器的简单介绍
风萧水丶寒
博客等级 码龄11年 6粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值