ORACLE数据库查看执行计划的方法

基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分析执行计划对SQL进行优化做相应说明

一、什么是执行计划(explain plan)

执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述。

二、如何查看执行计划

1: 在PL/SQL下按F5查看执行计划。第三方工具toad等。

很多人以为PL/SQL的执行计划只能看到基数、优化器、耗费等基本信息,其实这个可以在PL/SQL工具里面设置的。可以看到很多其它信息,如下所示

音疯 音疯

音疯是昆仑万维推出的一个AI音乐创作平台,每日可以免费生成6首歌曲。

音疯 146 查看详情 音疯 2: 在SQL*PLUS(PL/SQL的命令窗口和SQL窗口均可)下执行下面步骤

代码如下:
SQL>EXPLAIN PLAN FOR
SELECT * FROM SCOTT.EMP; –要解析的SQL脚本
SQL>SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

3: 在SQL*PLUS下(有些命令在PL/SQL下无效)执行如下命令:

代码如下:
SQL>SET TIMING ON             –控制显示执行时间统计数据
SQL>SET AUTOTRACE ON EXPLAIN       –这样设置包含执行计划、脚本数据输出,没有统计信息
SQL>执行需要查看执行计划的SQL语句
SQL>SET AUTOTRACE OFF           –不生成AUTOTRACE报告,这是缺省模式
SQL> SET AUTOTRACE ON           –这样设置包含执行计划、统计信息、以及脚本数据输出
SQL>执行需要查看执行计划的SQL语句
SQL>SET AUTOTRACE OFF
SQL> SET AUTOTRACE TRACEONLY      –这样设置会有执行计划、统计信息,不会有脚本数据输出
SQL>执行需要查看执行计划的SQL语句
SQL>SET AUTOTRACE TRACEONLY STAT –这样设置只包含有统计信息
SQL>执行需要查看执行计划的SQL语句

代码如下:
SQL> ALTER SESSION SET SQL_TRACE=TRUE;
SQL> SELECT * FROM SCOTT.EMP;
SQL> ALTER SESSION SET SQL_TRACE =FALSE;

那么此时如何查看相关信息?不管你在SQL*PLUS抑或PL/SQL DEVELOPER工具里面执行上面脚本过后都看不到什么信息,你可以通过下面脚本查询到trace日志信息
代码如下:
SELECT T.VALUE || ‘/’ || LOWER(RTRIM(I.INSTANCE, CHR(0))) || ‘_ora_’ ||
P.SPID || ‘.trc’ TRACE_FILE_NAME
FROM
( SELECT P.SPID
FROM V$MYSTAT M, V$SESSION S, V$PROCESS P
WHERE M.STATISTIC# =1
AND S.SID = M.SID
AND P.ADDR = S.PADDR
) P,
( SELECT T.INSTANCE
FROM V$THREAD T, V$PARAMETER V
WHERE V.NAME =’thread’
AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))
) I,
(SELECT VALUE FROM V$PARAMETER WHERE NAME=’user_dump_dest’) T

代码如下:
TKPROF 选项
选项 说明
TRACEFILE 跟踪输出文件的名称
OUTPUTFILE 已设置格式的文件的名称
SORT=option 语句的排序顺序
PRINT=n 打印前 n 个语句
EXPLAIN=user/password 以指定的用户名运行 EXPLAIN PLAN
INSERT=filename 生成 INSERT 语句
SYS=NO 忽略作为用户 sys 运行的递归 SQL 语句
AGGREGATE=[Y|N] 如果指定 AGGREGATE = NO TKPROF 不聚集相同
SQL 文本的多个用户
RECORD=filename 记录在跟踪文件中发现的语句
TABLE=schema.tablename 将执行计划放入指定的表而不是缺省的PLAN_TABLE

可以在操作系统中键入 tkprof 以获得所有可用选项和输出的列表
注 排序选项有

排序 选项说明
prscnt execnt fchcnt 调用分析执行提取的次数
prscpu execpu fchcpu 分析执行提取所占用的 CPU 时间
prsela exela fchela 分析执行提取所占用的时间
prsdsk exedsk fchdsk 分析执行提取期间的磁盘读取次数
prsqry exeqry fchqry 分析执行提取期间用于持续读取的缓冲区数
prscu execu fchcu 分析执行提取期间用于当前读取的缓冲区数
prsmis exemis 分析执行期间库高速缓存未命中的次数
exerow fchrow 分析执行期间处理的行数
userid 分析游标的用户的用户 ID

TKPROF 统计数据
Count: 执行调用数
CPU: CPU 的使用秒数
Elapsed: 总共用去的时间
Disk: 物理读取次数
Query: 持续读取的逻辑读取数
Current: 当前模式下的逻辑读取数
Rows: 已处理行数
TKPROF 统计信息
统计 含义
Count 分析或执行语句的次数以及为语句发出的提取调用数
CPU 每个阶段的处理时间以秒为单位如果在共享池中找到该语句对于分析阶段为 0
Elapsed 占用时间以秒为单位通常不是非常有用因为其它进程影响占用时间
Disk 从数据库文件读取的物理数据块如果该数据被缓冲则该统计可能很低
Query 为持续读取检索的逻辑缓冲区通常用于 SELECT 语句
Current 在当前模式下检索的逻辑缓冲区通常用于 DML 语句
Rows 外部语句所处理的行对于 SELECT 语句在提取阶段显示它对于 DML 语句在执行阶段显示它

Query 和Current 的总和为所访问的逻辑缓冲区的总数

执行下面命令:tkprof D:ORACLEPRODUCT10.2.0DB_1RDBMSTRACE/wgods_ora_3940.trc h:out.txtoutputfile explain=etl/etl

执行上面命令后,可以查看生成的文本文件
代码如下:
TKPROF: Release 10.2.0.1.0 – Production on 星期三 5月 23 16:56:41 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Trace file: D:ORACLEPRODUCT10.2.0DB_1RDBMSTRACE/wgods_ora_3940.trc
Sort options: default
********************************************************************************
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call
********************************************************************************
ALTER SESSION SET SQL_TRACE = TRUE
call count cpu elapsed disk query current rows
——- —— ——– ———- ———- ———- ———- ———-
Parse 0 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
——- —— ——– ———- ———- ———- ———- ———-
total 1 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0
Misses in library cache during execute: 1
Optimizer mode: CHOOSE
Parsing user id: 89 (ETL)
********************************************************************************
begin :id := sys.dbms_transaction.local_transaction_id; end;
call count cpu elapsed disk query current rows
——- —— ——– ———- ———- ———- ———- ———-
Parse 2 0.00 0.00 0 0 0 0
Execute 2 0.00 0.00 0 0 0 2
Fetch 0 0.00 0.00 0 0 0 0
——- —— ——– ———- ———- ———- ———- ———-
total 4 0.00 0.00 0 0 0 2
Misses in library cache during parse: 0
Optimizer mode: CHOOSE
Parsing user id: 89 (ETL)
********************************************************************************
SELECT *
FROM
SCOTT.EMP
call count cpu elapsed disk query current rows
——- —— ——– ———- ———- ———- ———- ———-
Parse 2 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.00 0.00 0 7 0 14
——- —— ——– ———- ———- ———- ———- ———-
total 4 0.00 0.00 0 7 0 14
Misses in library cache during parse: 1
Optimizer mode: CHOOSE
Parsing user id: 89 (ETL)
Rows Execution Plan
——- —————————————————
SELECT STATEMENT MODE: CHOOSE
TABLE ACCESS MODE: ANALYZED (FULL) OF ‘EMP’ (TABLE)
********************************************************************************
ALTER SESSION SET SQL_TRACE = FALSE
call count cpu elapsed disk query current rows
——- —— ——– ———- ———- ———- ———- ———-
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
——- —— ——– ———- ———- ———- ———- ———-
total 2 0.00 0.00 0 0 0 0
Misses in library cache during parse: 1
Optimizer mode: CHOOSE
Parsing user id: 89 (ETL)
********************************************************************************
OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
——- —— ——– ———- ———- ———- ———- ———-
Parse 5 0.00 0.00 0 0 0 0
Execute 5 0.00 0.00 0 0 0 2
Fetch 1 0.00 0.00 0 7 0 14
——- —— ——– ———- ———- ———- ———- ———-
total 11 0.00 0.00 0 7 0 16
Misses in library cache during parse: 2
Misses in library cache during execute: 1
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
——- —— ——– ———- ———- ———- ———- ———-
Parse 0 0.00 0.00 0 0 0 0
Execute 0 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
——- —— ——– ———- ———- ———- ———- ———-
total 0 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0
user SQL statements in session.
internal SQL statements in session.
SQL statements in session.
statement EXPLAINed in this session.
********************************************************************************
Trace file: D:ORACLEPRODUCT10.2.0DB_1RDBMSTRACE/wgods_ora_3940.trc
Trace file compatibility: 10.01.00
Sort options: default
session in tracefile.
user SQL statements in trace file.
internal SQL statements in trace file.
SQL statements in trace file.
unique SQL statements in trace file.
SQL statements EXPLAINed using schema:
ETL.prof$plan_table
Default table was used.
Table was created.
Table was dropped.
lines in trace file.
elapsed seconds in trace file.

4.3跟踪其它用户的进程,在很多时候我们需要跟踪其它用户的进程,而不是当前用户,可以通过ORACLE提供的系统包
DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION来完成。
例如:
代码如下:
SELECT SID, SERIAL#, USERNAME FROM V$SESSION WHERE USERNAME = ‘ETL’
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(61,76,TRUE);
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(61,76,FALSE);

5 利用10046事件
代码如下:
ALTER SESSION SET TRACEFILE_IDENTIFIER = 10046;
ALTER SESSION SET EVENTS=’10046 trace name context forever, level 8′;
SELECT * FROM SCOTT.EMP;
ALTER SESSION SET EVENTS =’10046 trace name context off’;
然后你可以用脚本查看追踪文件的位置
SELECT T.VALUE || ‘/’ || LOWER(RTRIM(I.INSTANCE, CHR(0))) || ‘_ora_’ ||
P.SPID || ‘.trc’ TRACE_FILE_NAME
FROM
( SELECT P.SPID
FROM V$MYSTAT M, V$SESSION S, V$PROCESS P
WHERE M.STATISTIC# =1
AND S.SID = M.SID
AND P.ADDR = S.PADDR
) P,
( SELECT T.INSTANCE
FROM V$THREAD T, V$PARAMETER V
WHERE V.NAME =’thread’
AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))
) I,
(SELECT VALUE FROM V$PARAMETER WHERE NAME=’user_dump_dest’) T
查询结果为wgods_ora_28279.trc文件, 但是去相应目录却没有找到对应的追踪文件,而是如下trace文件:wgods_ora_28279_10046.trc

6 利用10053事件

有点类似10046,在此略过、

7 系统视图

通过下面一些系统视图,你可以看到一些零散的执行计划的相关信息,有兴趣的话可以多去研究一下。
代码如下:
SELECT * FROM V$SQL_PLAN
SELECT * FROM V$RSRC_PLAN_CPU_MTH
SELECT * FROM V$SQL_PLAN_STATISTICS
SELECT * FROM V$SQL_PLAN_STATISTICS_ALL
SELECT * FROM V$SQLAREA_PLAN_HASH
SELECT * FROM V$RSRC_PLAN_HISTORY

三、看懂执行计划

1.执行顺序

执行顺序的原则是:由上至下,从右向左

由上至下:在执行计划中一般含有多个节点,相同级别(或并列)的节点,靠上的优先执行,靠下的后执行

从右向左:在某个节点下还存在多个子节点,先从最靠右的子节点开始执行。

当然,你在PL/SQL工具中也可以通过它提供的功能来查看执行顺序。如下图所示:

SQL>
名词解释:
recursive calls           递归调用
db block gets           从buffer cache中读取的block的数量当前请求的块数目,当前模式块意思就是在操作中正好提取的块数目,而不是在一致性读的情况下而产生的正常情况下,一个查询提取的块是在查询查询开始的那个时间点上存在的数据库,当前块是在这个时候存在数据块,而不是这个时间点之前或者之后的的数据块数目。
consistent gets          从buffer cache中读取的undo数据的block的数量数据请求总数在回滚段Buffer中的数据一致性读所需要的数据块,,这里的概念是在你处理你这个操作的时侯需要在一致性读状态上处理多个块,这些块产生的主要原因是因为你在查询过程中,由于其它会话对数据 块进行操作,而对所要查询的块有了修改,但是由于我们的查询是在这些修改之前调用的,所要需要对回滚 段中的数据块的前映像进行查询,以保证数据的一致性。这样就产生了一致性读。

physical reads           物理读 就是从磁盘上读取数据块的数量。其产生的主要原因是:
                  1:在数据库高速缓存中不存在这些块。
                  2:全表扫描
                  3:磁盘排序
redo size              DML生成的redo的大小
sorts (memory)           在内存执行的排序量
sorts (disk)            在磁盘执行的排序量
2091 bytes sent via SQL*Net to client     从SQL*Net向客户端发送了2091字节的数据
416 bytes received via SQL*Net from client  客户端向SQL*Net发送了416字节的数据。
参考文档:SQLPlus User’s Guide and Reference Release 11.1

db block gets 、 consistent gets 、 physical reads这三者的关系可以概括为:逻辑读指的是ORACLE从内存读到的数据块块数量,一般来说是:
consistent gets + db block gets. 当在内存中找不到所需要的数据块的话,就需要从磁盘中获取,于是就产生了物理读。
3.具体内容查看
1> Plan hash Value
这一行是这一条语句的的hash值,我们知道ORACLE对每一条ORACLE语句产生的执行计划放在SHARE POOL里面,第一次要经过硬解析,产生hash值。下次再执行时比较hash值,如果相同就不会执行硬解析。
2> COST

COST没有单位,是一个相对值,是SQL以CBO方式解析执行计划时,供ORACLE来评估CBO成本,选择执行计划用的。没有明确的含义,但是在对比是就非常有用。
公式:COST=(Single Block I/O COST + MultiBlock I/O Cost + CPU Cost)/ Sreadtim

3> 对上面执行计划列字段的解释:
Id: 执行序列,但不是执行的先后顺序。执行的先后根据Operation缩进来判断(采用最右最上最先执行的原则看层次关系,在同一级如果某个动作没有子ID就最先执行。一般按缩进长度来判断,缩进最大的最先执行,如果有2行缩进一样,那么就先执行上面的。)
    Operation:当前操作的内容。
    Name:操作对象
    Rows:也就是10g版本以前的Cardinality(基数),Oracle估计当前操作的返回结果集行数。
    Bytes:表示执行该步骤后返回的字节数。
    Cost(CPU):表示执行到该步骤的一个执行成本,用于说明SQL执行的代价。
    Time:Oracle 估计当前操作的时间。
4.谓词说明:
Predicate Information (identified by operation id):
—————————————————
2 – filter(“B”.”MGR” IS NOT NULL)
4 – access(“A”.”EMPNO” = “B”.”MGR”)
    Access: 表示这个谓词条件的值将会影响数据的访问路劲(全表扫描还是索引)。
    Filter:表示谓词条件的值不会影响数据的访问路劲,只起过滤的作用。
    在谓词中主要注意access,要考虑谓词的条件,使用的访问路径是否正确。
5、 动态分析
如果在执行计划中有如下提示:
Note
————
-dynamic sampling used for the statement
这提示用户CBO当前使用的技术,需要用户在分析计划时考虑到这些因素。 当出现这个提示,说明当前表使用了动态采样。我们从而推断这个表可能没有做过分析。
这里会出现两种情况:
(1) 如果表没有做过分析,那么CBO可以通过动态采样的方式来获取分析数据,也可以或者正确的执行计划。
(2) 如果表分析过,但是分析信息过旧,这时CBO就不会在使用动态采样,而是使用这些旧的分析数据,从而可能导致错误的执行计划。

四、表访问方式

1.Full Table Scan (FTS) 全表扫描

2.Index Lookup 索引扫描
There are 5 methods of index lookup:
index unique scan –索引唯一扫描
通过唯一索引查找一个数值经常返回单个ROWID,如果存在UNIQUE或PRIMARY KEY约束(它保证了语句只存取单行的话),ORACLE
经常实现唯一性扫描
Method for looking up a single key value via a unique index. always returns a single value, You must supply AT LEAST the leading column of the index to access data via the index.
index range scan –索引局部扫描
Index range scan is a method for accessing a range values of a particular column. AT LEAST the leading column of the index must be supplied to access data via the index. Can be used for range operations (e.g. > >= 使用一个索引存取多行数据,在唯一索引上使用索引范围扫描的典型情况是在谓词(WHERE 限制条件)中使用了范围操作符号(如>, , >=, index full scan –索引全局扫描
Full index scans are only available in the CBO as otherwise we are unable to determine whether a full scan would be a good idea or not. We choose an index Full Scan when we have statistics that indicate that it is going to be more efficient than a Full table scan and a sort. For example we may do a Full index scan when we do an unbounded scan of an index and want the data to be ordered in the index order.
index fast full scan –索引快速全局扫描,不带order by情况下常发生
Scans all the block in the index, Rows are not returned in sorted order, Introduced in 7.3 and requires V733_PLANS_ENABLED=TRUE and CBO, may be hinted using INDEX_FFS hint, uses multiblock i/o, can be executed in parallel, can be used to access second column of concatenated indexes. This is because we are selecting all of the index.
index skip scan –索引跳跃扫描,where条件列是非索引的前提情况下常发生
Index skip scan finds rows even if the column is not the leading column of a concatenated index. It skips the first column(s) during the search.
3.Rowid 物理ID扫描
This is the quickest access method available.Oracle retrieves the specified block and extracts the rows it is interested in. –Rowid扫描是最快的访问数据方式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1043292.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
css工具PostCSS插件管理与使用技巧
上一篇 2025年12月2日 05:28:46
快手官网在线登录 快手网页版入口链接分享
下一篇 2025年12月2日 05:28:52

相关推荐

  • 如何利用Draw.io Integration扩展在VSCode中绘制并嵌入架构图?

    安装Draw.io Integration扩展后,可在VSCode中直接创建编辑图表。右键选择“Create Diagram with Draw.io”新建.diagram文件,双击打开内置编辑器,拖拽组件绘制流程图、架构图等。保存后自动生成Base64编码的嵌入代码,粘贴至Markdown即可预览…

    2026年9月21日
    100
  • mysql如何理解数据完整性

    数据完整性在MySQL中通过主键、外键、约束等机制确保数据准确一致。1. 实体完整性用主键保证记录唯一,主键非空且不重复;2. 域完整性通过数据类型、CHECK约束、默认值等确保字段数据合法;3. 参照完整性利用外键维护表间关系,支持级联操作;4. 用户定义完整性由开发者通过触发器或程序实现业务规则…

    2026年9月21日
    100
  • Linux如何创建新用户并设置初始密码

    Linux如何创建新用户并设置初始密码Linux如何创建新用户并设置初始密码Linux如何创建新用户并设置初始密码Linux如何创建新用户并设置初始密码

    创建新用户并设初始密码需用useradd加passwd命令,如sudo useradd -m -s /bin/bash devuser创建用户,sudo passwd devuser设置密码;通过sudo usermod -aG sudo devuser赋予sudo权限;密码策略应包含长度、复杂度、…

    2026年9月21日 用户投稿
    000
  • Java中浮点数比较的陷阱:理解double类型的不精确性与正确比较方法

    java中`double`类型因其二进制浮点表示的固有不精确性,即使在相同java版本和架构下,也可能在不同环境中产生微小的数值差异。直接使用`==`比较浮点数是不可靠的,因为它无法容忍这些细微的舍入误差。正确的做法是采用基于容差(epsilon)的比较方法,通过判断两数之差的绝对值是否小于一个预设…

    2026年9月21日
    100
  • 如何下载豆包电脑网页版_豆包电脑网页版正版链接

    豆包AI电脑及网页版可通过官网和官方应用商店安全获取。1、访问https://www.doubao.com登录使用网页版;2、官网下载电脑客户端,支持Windows和macOS;3、通过Microsoft Store或App Store搜索“豆包 AI”,认准北京字节跳动网络技术有限公司开发,确保正…

    2026年9月21日
    200
  • 如何避免协程中的共享资源竞争?

    避免协程中的共享资源竞争可以通过以下方法:1. 使用锁(locks),如互斥锁或读写锁,确保同一时间只有一个协程访问共享资源。2. 采用无锁数据结构(lock-free data structures),通过原子操作和cas操作提高并发性能。3. 实施消息传递(message passing),通过…

    2026年9月21日
    000
  • Jedis jsonGet 方法返回字节数组值末尾出现 .0 的处理策略

    当使用jedis客户端的`jsonget`方法从redis获取json数据时,如果其中包含字节数组(如xml字符串的字节表示),可能会因底层json库(如gson或org.json)的默认行为,导致数字被统一上转型为`double`类型,从而在输出中显示`.0`后缀。本文将深入探讨此问题产生的原因,…

    2026年9月21日
    200
  • Laravel与Vue.js/React前端框架集成

    laravel可以与vue.js或react集成。1) 使用命令“php artisan preset vue”或“php artisan preset react”设置开发环境。2) 在laravel视图中引入编译后的javascript文件。3) 通过laravel的api路由和前端框架的htt…

    2026年9月21日
    000
  • mysql索引的类型和作用有哪些

    MySQL常见索引类型包括:1. 普通索引用于加速查询;2. 唯一索引确保列值唯一;3. 主键索引为唯一非空且自动创建聚簇索引;4. 聚簇索引决定数据物理存储顺序,每表仅一个;5. 非聚簇索引保存主键值,需回表查询;6. 覆盖索引避免回表提升性能;7. 联合索引遵循最左前缀原则;8. 全文索引支持文…

    2026年9月21日
    100
  • AI推文助手如何制作用户指南 AI推文助手的说明文档创作

    AI推文助手如何制作用户指南 AI推文助手的说明文档创作AI推文助手如何制作用户指南 AI推文助手的说明文档创作AI推文助手如何制作用户指南 AI推文助手的说明文档创作AI推文助手如何制作用户指南 AI推文助手的说明文档创作

    答案:配置账户、设定风格模板、生成推文、安排发布时间、监控数据。依次完成绑定社交账号、选择语气类型与关键词、输入主题生成内容、设置定时发布及查看分析仪表板,实现高效创作与优化。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 如果您希望使用A…

    2026年9月21日 用户投稿
    000
  • 安卓跑分第一 Redmi K70 至尊版本月发布

    redmi 今日正式宣布,备受期待的 k70 至尊版将于本月盛大发布,预计将与小米 mix 系列折叠旗舰同台竞技,共同演绎科技之美。据官方最新消息,redmi k70 至尊版将搭载联发科天玑 9300+ 处理器,这款处理器在安兔兔跑分测试中一举突破 238 万分大关,目前稳居安卓性能之巅。天玑 93…

    2026年9月21日
    000
  • 如何为特定语言配置VSCode的语法高亮?

    安装对应语言扩展并关联文件类型,可实现VSCode语法高亮。首先通过扩展面板安装目标语言插件,如Ruby或Rust;若文件扩展名未被识别,需手动将扩展名关联至正确语言;最后可在settings.json中配置editor.tokenColorCustomizations来自定义高亮颜色,确保语法解析…

    2026年9月21日
    000
  • Linux怎么使用systemctl管理服务

    Linux怎么使用systemctl管理服务Linux怎么使用systemctl管理服务Linux怎么使用systemctl管理服务Linux怎么使用systemctl管理服务

    systemctl是Linux中管理systemd服务的核心工具,提供统一命令集来启动、停止、重启、查看服务状态及设置开机自启,支持并行启动、依赖管理与Cgroups资源控制,相比SysVinit更高效;通过创建/etc/systemd/system/下的.service文件可自定义服务,包含[Un…

    2026年9月21日 用户投稿
    200
  • Java中如何使用Thread.interrupt安全终止线程

    interrupt() 是协作式线程终止机制,设置中断状态并由线程自行处理;2. 阻塞时抛 InterruptedException 且清除状态,需捕获并响应;3. 非阻塞循环中应显式调用 isInterrupted() 检查;4. 捕获异常后应重置中断状态以确保信号传递;5. 使用 Executo…

    2026年9月21日
    200
  • OPPO A3 Pro自动亮度异常解决方法 OPPO A3 Pro屏幕调节技巧

    先检查设置和传感器状态,再排查软硬件问题。关闭省电模式和自动亮度调节,手动调整亮度至50%-70%;清洁屏幕顶部传感器区域,检查手机壳是否遮挡;重启手机,排除第三方应用干扰,更新系统版本;若问题依旧,可能存在非原装屏幕或硬件故障,需联系售后检测。 OPPO A3 Pro出现自动亮度异常,多数情况是设…

    2026年9月21日
    100
  • mysql如何优化子查询

    优先使用JOIN替代相关子查询,减少扫描行数并利用索引;对子查询字段建立合适索引;用EXISTS代替IN处理大量数据;物化不相关子查询结果;避免无索引的标量子查询;通过EXPLAIN分析执行计划优化性能。 MySQL中子查询如果使用不当,容易导致性能下降,尤其是在数据量大的情况下。优化子查询的核心是…

    2026年9月21日
    100
  • 虚拟伴侣AI如何构建记忆库 虚拟伴侣AI长期记忆系统的开发技巧

    虚拟伴侣AI如何构建记忆库 虚拟伴侣AI长期记忆系统的开发技巧虚拟伴侣AI如何构建记忆库 虚拟伴侣AI长期记忆系统的开发技巧虚拟伴侣AI如何构建记忆库 虚拟伴侣AI长期记忆系统的开发技巧虚拟伴侣AI如何构建记忆库 虚拟伴侣AI长期记忆系统的开发技巧

    构建虚拟伴侣AI长期记忆系统需设计分层结构,区分事实、情感与事件记忆,使用向量或图数据库存储并标注元数据;通过自然语言理解提取关键信息,经权重评估后编码存入长期记忆库;借助语义匹配与上下文关联实现记忆唤醒,结合最近邻搜索提升检索效率;引入时间衰减与重复强化机制模拟遗忘规律,定期清理低权记忆;同时实施…

    2026年9月21日 用户投稿
    000
  • 如何在服务器上优化mysql安装

    优化MySQL需从系统环境、配置参数、存储引擎到日常维护多层面入手,首先确保内存合理分配、选用XFS等高性能文件系统、关闭非必要服务并调整内核参数;其次在MySQL配置中优先使用InnoDB引擎,科学设置innodb_buffer_pool_size、innodb_log_file_size、max…

    2026年9月21日
    100
  • 在Java中静态方法能否被重写

    静态方法属于类而非实例,不参与运行时动态绑定,因此不能被重写;2. 子类定义同名静态方法时发生方法隐藏,调用时机由引用类型在编译阶段决定;3. 如示例所示,Parent p = new Child() 调用 p.display() 输出 “Parent static method&#82…

    2026年9月21日
    000
  • Laravel中的服务容器(Service Container)是什么?

    laravel中的服务容器是框架的核心组件,充当服务定位器和依赖注入容器。1)它管理类及其依赖,简化依赖管理,提升代码可测试性和可维护性。2)服务容器是应用架构的基石,帮助拆分复杂业务逻辑成独立服务,提高代码灵活性和可扩展性。3)基本用法包括绑定和解析服务,如app()->bind(&#821…

    2026年9月21日
    100

发表回复

登录后才能评论
关注微信