[000-002-01].第29节:MySQL执行流程


1、MySQL的查询流程:

在这里插入图片描述
客户端请求进入到数据库服务器后,先进行查询缓存,如果命中,那么就返回结果;如果没命中,进入到解析器,进行词法解析和语法解析,生成解析树;然后进入到查询优化器,对SQL进行优化,然后生成一个执行计划;执行计划调用存储引擎来执行查询底层的文件系统,然后把查询的结果放到查询缓存后返回;


2、各流程分析介绍:

2.1.查询缓存介绍:

a.什么是查询缓存:

  • 1.Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;
  • 2.如果没有命中缓存,就进入到解析器阶段
  • 3.注意:因为查询缓存往往效率不高,所以在MySQL8.0 之后就抛弃了这个功能。
    在这里插入图片描述
    在这里插入图片描述

b.为何抛弃查询缓存:

  • 1.查询缓的存功能,大多数情况查询缓存就是个鸡肋,为什么呢?比如:SELECT employee_id,last_name FROM employees WHERE employee_id = 101;
    • 查询缓存是提前把查询结果缓存起来,这样下次不需要执行就可以直接拿到结果。需要说明的是,在MySQL 中的查询缓存,不是缓存查询计划,而是查询对应的结果。这就意味着查询匹配的 鲁棒性大大降低 ,只有 相同的查询操作才会命中查询缓存 两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中因此 MySQL 的查询缓存命中率不高 。
    • 同时,如果查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表,如 mysql 、information_schema、 performance_schema 数据库中的表,那这个请求就不会被缓存。以某些系统函数举例,可能同样的函数的两次调用会产生不一样的结果,比如函数 NOW ,每次调用都会产生最新的当前时间,如果在一个查询请求中调用了这个函数,那即使查询请求的文本信息都一样,那不同时间的两次查询也应该得到不同的结果,如果在第一次查询时就缓存了,那第二次查询的时候直接使用第一次查询的结果就是错误的!
    • 此外,既然是缓存,那就有它 缓存失效的时候 。MySQL的缓存系统会监测涉及到的每张表,只要该表的结构或者数据被修改,如对该表使用了 INSERT 、 UPDATE 、 DELETE 、 TRUNCATE TABLE 、 ALTER TABLE 、 DROP TABLE 或 DROP DATABASE 语句,那使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除!对于 更新压力大的数据库 来说,查询缓存的命中率会非常低。总之,因为查询缓存往往弊大于利,查询缓存的失效非常频繁

c.何时使用查询缓存:

  • 1.一般建议在静态表里使用查询缓存:
    • 静态表就是一般我们极少更新的表。比如,一个系统配置表、字典表,这张表上的查询才适合使们查询缓存。

d.查询缓存配置:

  • 1.查看当前mysql实例是否开启缓存机制:
    在这里插入图片描述
  • 2.MySQL也提供了这种"按需使用"的方式。你可以将my.cnf参数query_cache_type设置成DEMAND,代表当sql语句中有SQL_CACHE关键词时才缓存,比如:
	#query_cache_type有3个值:0代表关闭查询缓存OFF、1代表开启ON、2 〔DEMAND)代表按需加载	query_cache_type-2
  • 3.指定表使用查询缓存:这样对于默认的SQL语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用SQL_CACHE显式指定,像下面这个语句—样:
select SQL_CACHE * from test where ID=5;

e.查询缓存的命中率:

在这里插入图片描述

  • Qcache_free_blocks :.表示查询缓存中还有多少剩余的blocks,如果该值显示较大,则说明查询缓存中的内存碎片过多了,可能在一定的时间进行整理。|
  • Qcache_free_memory :查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,DBA可以根据实际情况做出调整。
  • Qcache_hits :表示有多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。
  • Qcache_inserts:表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的,这很正常。
  • Qcache_lowmem_prunes :该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。
  • Qcache_not_cached :表示因为query_cache_type的设置而没有被缓存的查询数量。
  • Qcache_queries_in_cache:当前缓存中缓存的查询的数量
  • Qcache_total blocks :当前缓存的block数量。

2.2.解析器介绍:

在解析器中对 SQL 语句进行语法分析、语义分析

在这里插入图片描述

  • 1.如果没有命中查询缓存,就要开始真正执行语句了。首先,MySQL需要知道你要做什么,因此需要对SQL语句做解析。SQL语句的分析分为词法分析与语法分析。
  • 2.分析器先做“ 词法分析 ”。你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。
  • 3.MySQL 从你输入的"select"这个关键字识别出来,这是一个查询语句。它也要把字符串“T”识别成“表名 T”,把字符串“ID”识别成“列 ID”。
    接着,要做“ 语法分析 ”。根据词法分析的结果,语法分析器(比如:Bison)会根据语法规则,判断你输入的这个 SQL 语句是否 满足 MySQL 语法 。
    #语法错误:group by后面没有job_id(词对但是组合在一起出现了问题)
    select department_id,job_id,avg(salary) from employees group by department_id;
    
  • 4.如果你的语句不对,就会收到"You have an error in your SQL syntax"的错误提醒,比如语句from写成了"rom"–>词法错误
  • 5.如果SQL语句正确,则会生成一个这样的语法树:
    在这里插入图片描述

下面是SQL词法分析的过程步骤:

在这里插入图片描述

2.3.优化器介绍:

在优化器中会确定 SQL 语句的执行路径,比如是根据全表检索 ,还是根据索引检索等。

  • 1.经过了解析器,MySQL就知道你要做什么了。在开始执行之前,还要先经过优化器的处理。一条查询可以有很多种执行方式,最后都返回相同的结果。
  • 2.优化器的作用就是找到这其中最好的执行计划
    在这里插入图片描述
  • 3.比如:优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序,还有表达式简化、子查询转为连接、外连接转为内连接等
  • 4.举例:如下语句是执行两个表的 join:
    select * from test1 join test2 using(ID)
    where test1.name='zhangwei' and test2.name='mysql高级课程';
    
  • 方案1:可以先从表 test1 里面取出 name='zhangwei’的记录的 ID 值,再根据 ID 值关联到表 test2,再判断 test2 里面 name的值是否等于 ‘mysql高级课程’。

  • 方案2:可以先从表 test2 里面取出 name=‘mysql高级课程’ 的记录的 ID 值,再根据 ID 值关联到test1,再判断 test1 里面 name的值是否等于 zhangwei。

  • 这两种执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一个方案。

  • 优化器阶段完成后,这个语句的执行方案就确定下来了,然后进入执行器阶段。如果你还有一些疑问,比如优化器是怎么选择索引的,有没有可能选择错等。后面讲到索引我们再谈。

  • 5.在查询优化器中,可以分为逻辑查询 优化阶段和物理查询优化阶段
    • 逻辑查询优化就是通过改变SQL语句的内容来使得SQL查询更高效,同时为物理查询优化提供更多的候选执行计划。
      • 通常采用的方式是对SQL语句进行等价变换,对查询进行重写,而查询重写的数学基础就是关系代数。对条件表达式进行等价谓词重写、条件简化,对视图进行重写,对子查询进行优化,对连接语义进行了外连接消除、嵌套连接消除等
    • 物理查询优化是基于关系代数进行的查询重写,而关系代数的每一步都对应着物理计算,这些物理计算往往存在多种算法。因此需要计算各种物理路径的代价,从中选择代价最小的作为执行计划。在这个阶段里,对于单表和多表连接的操作,需要高效地使用索引,提升直询效率。

2.4.执行器:

截止到现在,还没有真正去读写真实的表,仅仅只是产出了一个执行计划。于是就进入了执行器阶段

在这里插入图片描述

  • 1.在执行之前需要判断该用户是否具备权限 。如果没有,就会返回权限错误。如果具备权限,就执行 SQL查询并返回结果。
  • 2.在 MySQL8.0 以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。select * from test where id=1;
  • 3.如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,调用存储引擎API对表进行的读写。存储引擎API只是抽象接口,下面还有个存储引擎层,具体实现还是要看表选择的存储引擎
    在这里插入图片描述
  • 4.比如:表 test 中,ID 字段没有索引,那么执行器的执行流程是这样的:
    • 调用 InnoDB 引擎接口取这个表的第一行,判断 ID 值是不是1,如果不是则跳过,如果是则将这行存在结果集中;
    • 调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。
    • 执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。至此,这个语句就执行完成了。对于有索引的表,执行的逻辑也差不多

2、SQL执行流程总结:

  • 1.SQL 语句在 MySQL 中的流程是 SQL语句→查询缓存→解析器→优化器→执行器
    在这里插入图片描述

3、MySQL执行原理

1.前面的结构图很复杂,我们需要抓取最核心的部分:SQL的执行原理。不同的DBMS的SQL的执行原理是相通的,只是在不同的软件中,各有各的实现路径

2.既然一条SQL语句会经历不同的模块,那我们就来看下,在不同的模块中。SQL执行所使用的资源(时间)是怎样的。如何在MySQL中对一条 SQL语句的执行时间进行分析

3.1.MySQ8版本中SQL

a.确认profiling 是否开启

只有profiling 开启,才可以让MySQL收集在SQL执行时所使用的资源情况

  • 1.select @@profiling;或者show variables like '%profiling%'查看是否开启计划
  • 2.profiling=0代表关闭,我们需要把 profiling 打开,即设置为 1
    select @@profiling;
    /*
    +-------------+
    | @@profiling |
    +-------------+
    |           0 |
    +-------------+
    */
    show variables like 'profiling';
    /*
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | profiling     | OFF   |
    +---------------+-------+
    */
    
  • 2.把 profiling 打开的命令:
    set profiling=1;
    select @@profiling;
    /*
    +-------------+
    | @@profiling |
    +-------------+
    |           1 |
    +-------------+
    */
    

b.多次执行相同SQL查询

  • 1.然后我们执行一个 SQL 查询(你可以执行任何一个 SQL 查询):select * from employees;
  • 2.查看profiles:
    • 查看当前会话所产生的所有 profiles:show profiles; 此命令会显示最近的几次查询
    /*本机输出:
    +----------+------------+-------------------------+
    | Query_ID | Duration   | Query                   |
    +----------+------------+-------------------------+
    |        1 | 0.00031625 | select @@profiling      |
    |        2 | 0.00019625 | select * from employees |
    +----------+------------+-------------------------+
    */
    
  • 3.查看profile:显示执行计划,查看程序的执行步骤: show profile
    /*本机输出
    +--------------------------------+----------+
    | Status                         | Duration |
    +--------------------------------+----------+
    | starting                       | 0.000172 |
    | Executing hook on transaction  | 0.000013 |
    | starting                       | 0.000012 |
    | checking permissions           | 0.000008 |
    | Opening tables                 | 0.000044 |
    | init                           | 0.000005 |
    | System lock                    | 0.000008 |
    | optimizing                     | 0.000004 |
    | statistics                     | 0.000021 |
    | preparing                      | 0.000016 |
    | executing                      | 0.000239 |
    | end                            | 0.000009 |
    | query end                      | 0.000003 |
    | waiting for handler commit     | 0.000007 |
    | closing tables                 | 0.000007 |
    | freeing items                  | 0.000030 |
    | cleaning up                    | 0.000013 |
    +--------------------------------+----------+
    */
    
  • 4.当然你也可以查询指定的 Query ID,比如:show profile for query 7;
    在这里插入图片描述
  • 5.还可以查询更丰富的内容:show profile cpu,block io for query 6;
    #本机测试
    show profile for query 1;
    /*本机输出:
    +----------------------+----------+
    | Status               | Duration |
    +----------------------+----------+
    | starting             | 0.000116 |
    | checking permissions | 0.000007 |
    | Opening tables       | 0.000028 |
    | init                 | 0.000023 |
    | optimizing           | 0.000011 |
    | executing            | 0.000009 |
    | end                  | 0.000003 |
    | query end            | 0.000005 |
    | closing tables       | 0.000003 |
    | freeing items        | 0.000021 |
    | cleaning up          | 0.000009 |
    +----------------------+----------+
    */
    
  • 6.show profile cpu,block io for query 1;或show profile cpu,block io for query 1\G;
    /*部分输出:
    *************************** 1. row ***************************Status: startingDuration: 0.000116CPU_user: 0.000113CPU_system: 0.000000Block_ops_in: 0
    Block_ops_out: 0
    *************************** 2. row ***************************Status: checking permissionsDuration: 0.000007CPU_user: 0.000005CPU_system: 0.000000Block_ops_in: 0
    Block_ops_out: 0
    */
    

3.2.MySQL5.7中SQL执行原理:

a.配置文件中开启查询缓存

上述操作:show profile for query 7show profile for query 6在MySQL5.7中测试,发现前后两次相同的sql语句,执行的查询过程仍然是相同的。这是因为默认缓存是关闭的,这里我们需要显式开启查询缓存模式

  • 1.在MySQL5.7中如下设置:在 /etc/my.cnf 中新增一行:
    query_cache_type=1
    
  • 2.重启mysql服务
    systemctl restart mysqld
    
  • 3.开启查询执行计划,由于重启过服务,需要重新执行如下指令,开启profiling
    set profiling=1;
    

b.测试两次相同的查询效果:

  • 1.执行语句两次:
    select * from locations;
    select * from locations;
    
  • 2.查看profiles
    在这里插入图片描述
  • 3.根据Query_ID,来查看profile,显示执行计划,先查看第7条,程序的执行步骤:
    show profile for query 7;
    

在这里插入图片描述

上面的截图中,storing result in query cache 把查询结果放入查询缓存

  • 4.再根据id为8来查看具体的查询内容:
	show profile for query 8;

在这里插入图片描述

由上述的截图可知,在执行编号8时,比执行编号7时少了很多信息,可以看出查询语句直接从缓存中获取数据

注意1: SQL必须是一致的,否则,不能命中缓存;例如:

#虽然查询结果一致。但并没有命中缓存
select * from mydb.mytbl where id=2
select * from mydb.mytbl where id>1 and id<3

注意2: 同样的开启缓存的配置信息如果在MySQL8中添加。重启服务时会报错

c.查看其他参数的利用情况:

  • 1.除了查看cpu、io阻塞等参数情况,还可以查询下列参数的利用情况
    在这里插入图片描述
  • 1.例子: show profile cpu,block io for query 7;
    在这里插入图片描述

4、Oracle中的SQL执行流程:

Oracle 中采用了共享池来判断 SQL 语句是否存在缓存和执行计划,通过这一步骤我们可以知道应该采用硬解析还是软解析

a.SQL 在 Oracle 中的执行过程:

在这里插入图片描述

  • 1.语法检查:检查 SQL 拼写是否正确,如果不正确,Oracle 会报语法错误。
  • 2.语义检查:检查 SQL 中的访问对象是否存在。比如我们在写 SELECT 语句的时候,列名写错了,系统就会提示错误。语法检查和语义检查的作用是保证 SQL 语句没有错误。
  • 3.权限检查:看用户是否具备访问该数据的权限。
  • 4.共享池检查:共享池(Shared Pool)是一块内存池,最主要的作用是缓存 SQL 语句和该语句的执行计划。Oracle 通过检查共享池是否存在 SQL 语句的执行计划,来判断进行软解析,还是硬解析。那软解析和硬解析又该怎么理解呢?
    • 在共享池中,Oracle 首先对 SQL 语句进行 Hash 运算 ,然后根据 Hash 值在库缓存(Library Cache)中查找,如果存在 SQL 语句的执行计划 ,就直接拿来执行,直接进入“执行器”的环节,这就是 软解析 。
    • 如果没有找到 SQL 语句和执行计划,Oracle 就需要创建解析树进行解析,生成执行计划,进入“优化器”这个步骤,这就是硬解析 。
  • 5.优化器:优化器中就是要进行硬解析,也就是决定怎么做,比如创建解析树,生成执行计划。
  • 6.执行器:当有了解析树和执行计划之后,就知道了 SQL 该怎么被执行,这样就可以在执行器中执行语句了

b.概念说明:

  • 1.共享池:是 Oracle 中的术语,包括了库缓存,数据字典缓冲区等。我们上面已经讲到了库缓存区,它主要缓存 SQL 语句和执行计划。而 数据字典缓冲区 存储的是 Oracle 中的对象定义,比如表、视图、索引等对象。当对 SQL 语句进行解析的时候,如果需要相关的数据,会从数据字典缓冲区中提取。
  • 2.库缓存:这一个步骤,决定了 SQL 语句是否需要进行硬解析。为了提升 SQL 的执行效率,我们应该尽量避免硬解析,因为在 SQL 的执行过程中,创建解析树,生成执行计划是很消耗资源的。

c.如何避免硬解析,尽量使用软解析呢?

  • 1.在 Oracle 中, 绑定变量是它的一大特色。绑定变量就是在 SQL 语句中使用变量,通过不同的变量取值来改变 SQL 的执行结果。
  • 2.这样做的好处是能提升软解析的可能性 ,不足之处在于可能会导致生成的执行计划不够优化,因此是否需要绑定变量还需要视情况而定。
  • 3.举个例子,我们可以使用下面的查询语句:

select * from player where player_id = 10001;
也可以使用绑定变量,如:
select * from player where player_id = :player_id;

  • 这两个查询语句的效率在 Oracle 中是完全不同的。如果你在查询 player_id = 10001 之后,还会查询10002、10003 之类的数据,那么每一次查询都会创建一个新的查询解析。
  • 而第二种方式使用了绑定变量,那么在第一次查询之后,在共享池中就会存在这类查询的执行计划,也就是软解析。
  • 因此,我们可以通过使用绑定变量来减少硬解析,减少 Oracle 的解析工作量。但这种方式也有缺点,使用动态 SQL 的方式,因为参数不同,会导致 SQL 的执行效率不同,同时 SQL 优化也会比较困难

d.Oracle的架构图:

在这里插入图片描述

e.Oracle架构简图:

在这里插入图片描述

f.Oracle执行原理总结小结:

  • 1.Oracle 和 MySQL 在进行 SQL 的查询上面有软件实现层面的差异。Oracle 提出了共享池的概念,通过共享池来判断是进行软解析,还是硬解析

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

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

相关文章

企业图纸文档管理系统推荐 三大企业图纸文档管理软件详细介绍

在现代企业的设计和生产过程中&#xff0c;图纸文档的管理是至关重要的一环。 无论是建筑、制造业&#xff0c;还是技术研发领域&#xff0c;图纸文档的正确存储、分享与管理能够极大提升工作效率&#xff0c;避免误操作或信息丢失。 接下来&#xff0c;小编将为大家推荐三款优…

采购管理系统SRM助力电子元器件制造企业构建高效的供应商管理体系

在当今快速迭代的电子元器件制造行业中&#xff0c;构建一套高效、透明的供应商管理体系对于提升企业竞争力、降低运营成本、确保供应链稳定性至关重要。采购管理系统(SRM&#xff0c;Supplier Relationship Management)作为这一领域的得力助手&#xff0c;正引领着电子元器件制…

远程连接服务器时出现“这可能是由于CredSSP加密数据库修正”的错误提示的解决办法

现象&#xff1a; 当远程连接服务器时&#xff0c;有时候会出现以下提示&#xff0c;从而导致无法成功连接服务&#xff0c;如下所述&#xff1a; 原因&#xff1a; 远程桌面使用的是“凭据安全支持提供程序协议 (CredSSP) ”&#xff0c;这个协议在未修补的版本中是存在漏…

scrapy 爬取微博(四)【最新超详细解析】: 设计篇

一、功能设计 开始开发之前我们先对本文的scrapy微博爬虫工程进行一个功能的设计&#xff0c;包含的功能模块如下&#xff1a; 功能模块具体描述微博文章爬取根据关键词、时间范围等参数爬取微博文章&#xff0c;获取用户名、ID、微博mid、微博内容、点赞、转发、评论等数据微…

《深度学习》卷积神经网络 使用最优模型、调整学习率 用法解析及案例实现

目录 一、使用最优模型 1、什么是最优模型 2、如实使用最优模型 1&#xff09;读取参数方法 2&#xff09;调用完整模型方法 3&#xff09;实例 完整代码&#xff1a; 打印结果&#xff1a; 二、调整学习率 1、什么是调整学习率 2、目的 3、调整学习率的方法 1&am…

C++ 语言课程笔记

C 语言课程笔记 C语言程序设计第四版——谭浩强著&#xff0c;此书中的代码题大部分已经在本文中展示&#xff0c;以及南开大学 C 语言上机题库 100 题的作答&#xff0c;如果有作答不正确的地方或者可优化的地方&#xff0c;欢迎指正&#xff0c;谢谢&#xff01; 001 屏幕输出…

DAMODEL丹摩智算平台实践CogVideoX

文章目录 前言 一、平台账号注册并登录 二、部署CogVideoX &#xff08;一&#xff09;简介 &#xff08;二&#xff09;部署 1. 创建实例 2. 配置环境和依赖 3.预制模型与配置文件 三、开始运行 总结 前言 该文章主要记录DAMODEL丹摩智算平台实践过程与心得体会&…

【YashanDB知识库】客户端字符集与数据库字符集兼容问题

本文转自YashanDB官网&#xff0c;具体内容请见https://www.yashandb.com/newsinfo/7352675.html?templateId1718516 问题现象 客户端yasql配置字符集为GBK&#xff0c;服务端yasdb配置字符集为UTF8&#xff0c;之后执行语句&#xff1a; 会发现&#xff1a; 期望是两个都…

FAT32取证分析

前言&#xff1a; 在正常工作中经常会有数据恢复或者取证分析的场景&#xff0c;数据是否能被恢复&#xff0c;主要还是看数据是否被覆盖&#xff0c;正常情况下文件虽然被删除&#xff0c;只是修对应的标志位&#xff0c;文件本身数据并不会被破坏&#xff0c;所以我们就可以…

【Java】1.初识Java

文章目录 1. 使用记事本创建.Java程序2. 使用IDEA创建第一个Java程序3. 标识符4. 关键字 1. 使用记事本创建.Java程序 先创建了HelloWorld.java这个文件。然后用Sublime Text记事本打开&#xff0c;输入以下代码。 winr&#xff0c;cmd输入D:切换到D盘&#xff0c;然后输入cd …

投资气膜场馆:开启未来体育发展的新纪元—轻空间

随着对体育设施建设的重视&#xff0c;气膜场馆作为一种创新的体育设施&#xff0c;正日益成为投资的热门选择。气膜场馆凭借其独特的优势和多重好处&#xff0c;不仅能提升体育场馆的功能性和经济性&#xff0c;更为地方经济发展注入了新的活力。 成本效益显著 气膜场馆具有快…

419. 棋盘上的战舰(C++)

题目 给你一个大小为 m x n 的矩阵 board 表示棋盘&#xff0c;其中&#xff0c;每个单元格可以是一艘战舰 X 或者是一个空位 . &#xff0c;返回在棋盘 board 上放置的 舰队 的数量。 舰队 只能水平或者垂直放置在 board 上。换句话说&#xff0c;舰队只能按 1 x k&#xff…

SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用

SimpleAIAgent是基于C# Semantic Kernel 与 WPF构建的一款AI Agent探索应用。主要用于使用国产大语言模型或开源大语言模型构建AI Agent应用的探索学习&#xff0c;希望能够帮助到感兴趣的朋友。 接下来我想分享一下我的AI Agent应用实践。 翻译文本并将文本存入文件 第一个…

Transformer入门指南!14天速成

想系统而又透彻地入门和学习Transformer&#xff0c;可以按照以下思路(步骤): 1、首先&#xff0c;了解一些NLP领域的基本知识&#xff0c;比如文本是如何被表征的&#xff0c;序列文本信息的处理&#xff0c;基于(深度神经网络)的语言模型是如何处理自然语言的; 2、Transfor…

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-21

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-21 1. AIvril: AI-Driven RTL Generation With Verification In-The-Loop Authors: Mubashir ul Islam, Humza Sami, Pierre-Emmanuel Gaillardon, and Valerio Tenace AIVRIL: 人工智能驱动的RTL生成与验证内…

表观项目文章速递,平均IF=9.7

表观组学是研究基因组层面的表观遗传变化及其调控机制的一门学科&#xff0c;它在现代生物学研究中具有重要意义。传统的遗传学研究主要关注DNA序列的变化&#xff0c;而表观组学则着眼于在不改变DNA序列的情况下&#xff0c;如何通过化学修饰和染色质结构的改变进而影响基因表…

【开源免费】基于SpringBoot+Vue.JS墙绘产品展示交易平台(JAVA毕业设计)

本文项目编号 T 049 &#xff0c;文末自助获取源码 \color{red}{T049&#xff0c;文末自助获取源码} T049&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Windows 10 on ARM, version 22H2 (updated Sep 2024) ARM64 AArch64 中文版、英文版下载

Windows 10 on ARM, version 22H2 (updated Sep 2024) ARM64 AArch64 中文版、英文版下载 基于 ARM 的 Windows 10 请访问原文链接&#xff1a;https://sysin.org/blog/windows-10-arm/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;s…

Ansible-playbook使用roles

文章目录 一、Ansible的内置目录及文件总览目录及文件解释production目录staging目录host_vars目录和group_vars目录library目录、module_utils目录、filter_plugins目录site.ymlroles目录roles/自定义角色名目录下roles/自定义角色名目录/tasks目录下roles/自定义角色名目录/h…

NLP技术在营业选址中的实践与探索

传统营业选址面临的问题 在电信业务的服务流程中&#xff0c;用户装机地址的准确性和清晰度对于整个服务体验和运营效率起着至关重要的作用。然而&#xff0c;在实际操作中&#xff0c;装机地址的确定往往面临诸多挑战&#xff0c;这些问题不仅影响用户的服务体验&#xff0c;也…