목차
1、获取SQL执行计划的方式
1.1 使用explain plan工具
1.1.1 前提条件
1.1.2  explain plan语法  
1.1.3  执行计划查询和展现
1.2、查询动态性能视图
1.3、启用执行计划跟踪功能
1.3.1 启动当前会话的跟踪
1.3.1.2 定位跟踪文件
1.3.1.2.1 通过查询语句
1.3.1.2.2 标识跟踪文件
1.3.2 启动其他会话的跟踪
1.3.3 使用登陆触发器启动跟踪
데이터 베이스 MySQL 튜토리얼 评估和提升oracle数据库性能的主要工具

评估和提升oracle数据库性能的主要工具

Jun 07, 2016 pm 03:37 PM
oracle sql 기본 도구 성능 홍보하다 데이터 베이스 평가하다

SQL是一种非过程化的语言,我们定义的sql语句仅仅告诉数据库我们需要什么样的数据,并没有告诉数据库如何获取这些数据。而执行计划正式数据库获取这些数据的方式和步骤。在日常开发中,为了优化数据库的需要,我们常常需要获取sql语句的执行计划,通过它判断

        SQL是一种非过程化的语言,我们定义的sql语句仅仅告诉数据库我们需要什么样的数据,并没有告诉数据库如何获取这些数据。而执行计划正式数据库获取这些数据的方式和步骤。在日常开发中,为了优化数据库的需要,我们常常需要获取sql语句的执行计划,通过它判断语句执行性能的高低,进而进行优化。那么怎么获得执行计划呢?

1、获取SQL执行计划的方式

  1.  使用explain plan工具
  2.  查询动态性能视图
  3.  启用执行计划跟踪功能,即autotrace功能
  4. 使用PL/SQL Developer提供的获取执行计划方法
      

    下面分别详细介绍下及几种获取执行计划的方式:

1.1 使用explain plan工具

     explain plan命令可以将一条SQL语句预估的执行计划插入到计划表plan table,然后查询该表来获取预估的执行计划。 explain plan命令将SQL语句的执行计划插入到计划表,并不会执行隐式commit,所以如果想要持久化到数据库,需要显示commit。

   提示:explain plan命令获得的执行计划是预估的,因为它并不是该SQL语句真正执行时的执行计划,随着oracle库中参数、表数据等因素的变化(比如表的数据的太少,虽然某些字段上建了索引,在执行时索引并不一定真正其效果,但是explain plan获得执行计划可能是走索引的),预估的执行计划往往和实际是有出入的。

1.1.1 前提条件

        预估的执行计划要存入plan table表,所以执行explain plan之前要确保plan table表的存在。在oracle 10g之前,plan table表是需要手动创建的,从oracle 10g开始,oracle会自动创建全局plan table表(表名为PLAN_TABLE),供所有用户使用。

        如何要创建表plan_table,或创建其他的计划表呢?

          找到$ORACLE_HOME/rdbms/admin/utlxplan.sql脚本文件,可以根据该脚本创建自己想要的计划表,只需要根据情况修改表名plan_table即可。


         提示:关于计划表plan_table介绍请参考《Oracle 10g版本计划表PLAN_TABLE列的说明》

1.1.2  explain plan语法  

            EXPLAIN PLAN

              [SET STATEMENT_ID = 'statement_id']

              [INTO table_name]

              FOR sql_statement

           说明:

             1、方括号[]中的语句是可选的。

             2、相关选项说明

<span></span>

选项
说明
statement_id
标识存入表plan_table的sql语句的执行计划,不同sql语句的执行计划可以共用相同的statement_id标识,但是为了进行区分,尽量唯一,可以通过statement_id作为条件查询plan_table表中的执行计划。
table_name 
执行计划表的名称,如果没有指定,默认表名plan_table,如果指定的表不是plan_table表,而是自定义的,必须要确保该表和标准的计划表结果相同。
sql_statement
sql语句,该sql语句可以包含绑定变量。

1.1.3  执行计划查询和展现

    下面介绍两种查询执行计划的方法:使用dbms_xplan包、自定义层次查询语句,这两种方法都是从计划表查询数据,通过使用dbms_xplan包查询执行计划,默认计划表名为plan_table, 而且查询出来的参数数据也是固定的;但是通过自定义的层次查询语句不但可以自由指定计划表,还可以根据情况选择查询参数。

  • 使用DBMS_XPLAN包查看执行计划

    语句如下:

<span></span>

SELECT * FROM TABLE(dbms_xplan.display());
로그인 후 복사
     如:

SQL> explain plan 
  2  for select * from t_student where gid = 1;
Explained

SQL> SELECT * FROM TABLE(dbms_xplan.display());
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1947974170
--------------------------------------------------------------------------------
| Id  | Operation                   | Name         | Rows  | Bytes | Cost (%CPU)
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |              |     1 |   595 |     0   (0)
|   1 |  TABLE ACCESS BY INDEX ROWID| T_STUDENT    |     1 |   595 |     0   (0)
|*  2 |   INDEX UNIQUE SCAN         | SYS_C0010947 |     1 |       |     0   (0)
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("GID"=1)
14 rows selected
로그인 후 복사
   这种查看执行计划的方法比较简便,但是也有局限性,它查询参数数据有限,只能从名为plan_table的计划表查询数据,而是展现参数也是固定的(仅限Operation、Name、Rows、Bytes和Cost的参数数据),不过这些数据一般足够了。如果想获得更多的参数数据,可以使用自定义的层次查询语句。
  • 自定义层次查询语句执行计划

    查询语句如下:

<span></span>

SELECT RTRIM(LPAD(' ', 2*LEVEL)||
       RTRIM(operation)||' '||
       RTRIM(options)||' '||
                object_name) query_plan, cost, cardinality, time
  FROM plan_table
  CONNECT BY PRIOR id = parent_id
  START WITH ID = 0;
로그인 후 복사
      这种方法使用者可以根据自己的需要查看计划表中字段,上面语句只写了query_plan、cost、cardinality和time,其他字段请参考《Oracle 10g版本计划表PLAN_TABLE列的说明》。

      如:

SQL> explain plan
  2  for select * from t_student where gid = 1;
Explained

SQL> SELECT RTRIM(LPAD(' ', 2*LEVEL)||
  2         RTRIM(operation)||' '||
  3         RTRIM(options)||' '||
  4                  object_name) query_plan, cost, cardinality, time
  5    FROM plan_table
  6    CONNECT BY PRIOR id = parent_id
  7    START WITH ID = 0;
QUERY_PLAN                                                                                                          COST                             CARDINALITY                                    TIME
-------------------------------------------------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
  SELECT STATEMENT                                                                                                     0                                       1                                       1
    TABLE ACCESS BY INDEX ROWID T_STUDENT                                                                              0                                       1                                       1
      INDEX UNIQUE SCAN SYS_C0010947                                                                                   0                                       1                                       1
로그인 후 복사


1.2、查询动态性能视图

     上面1.1章节介绍查询的执行计划,都是预估的执行计划。而动态性能视图中缓存的SQL执行信息,则是真实的执行计划。

     下面介绍一下几个动态视图:

  1. V$SQL:缓存着已执行的SQL语句的时间消耗、CPU或IO需求等信息。
  2. V$SQL_PLAN:缓存SQL语句的执行计划信息。
  3. V$SQL_PLAN_STATICS:记录着执行计划每个步骤执行次数、IO次数以及处理记录数。

      通过动态性能视图查询较高SQL的执行计划的思路是:

       1.通过挖掘V$SQL中具有较高时间消耗、CPU或IO需求的SQL语句。这一步通过自定义SQL完成。比如消耗时间最多的前10条语句,

        查询语句如下:

<span></span>

SELECT sql_id, child_number, sql_text, elapsed_time
  FROM ( SELECT sql_id, child_number, sql_text, elapsed_time, cpu_time, disk_reads,
          RANK () OVER (ORDER BY elapsed_time DESC) AS elapsed_rank
              FROM v$sql)
 WHERE elapsed_rank 
<p><span><span><span>       2.<span>通过使用</span></span><span><span>V$SQL_PLAN和V$SQL_PLAN_STATICS找到不尽如人意的SQL语句的执行计划。这一步不需要我们写SQL,DBMS_XPLAN已经为提供可查询方法DBMS_XPLAN.display_cursor().具体使用请参考《DBMS_XPLAN包中函数的使用》。</span></span></span></span></p>
<p><span><span><span><span><br>
</span></span></span></span></p>
<p><span><span><span>       <span>例子:</span></span></span></span></p>
<p><span><span></span></span></p><pre class="brush:php;toolbar:false">SQL> SELECT sql_id, child_number, sql_text, elapsed_time
  2    FROM ( SELECT sql_id, child_number, sql_text, elapsed_time, cpu_time, disk_reads,
  3            RANK () OVER (ORDER BY elapsed_time DESC) AS elapsed_rank
  4                FROM v$sql)
  5   WHERE elapsed_rank  SELECT * FROM TABLE(DBMS_XPLAN.display_cursor('at5b8k7swu5w4', '0', 'TYPICAL'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  at5b8k7swu5w4, child number 0
-------------------------------------
select * from t_student where gid = 2
Plan hash value: 1947974170
--------------------------------------------------------------------------------
| Id  | Operation                   | Name         | Rows  | Bytes | Cost (%CPU)
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |              |       |       |     1 (100)
|   1 |  TABLE ACCESS BY INDEX ROWID| T_STUDENT    |     1 |   595 |     0   (0)
|*  2 |   INDEX UNIQUE SCAN         | SYS_C0010947 |     1 |       |     0   (0)
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("GID"=2)
19 rows selected
로그인 후 복사

1.3、启用执行计划跟踪功能

          工具EXPLAIN PLAN和DBMS_XPLAN可以获取预估执行计划和缓存中的执行信息,他们是主要的SQL调优工具,但是他们只是获取单个SQL的执行信息。如果想获取特定事务或是应用优化一批SQL语句,跟踪(Tracing)是个有效的方法。跟踪可以提供EXPLAIN PLAN与DBMS_XPLAIN能提供的所有信息,并且更加准确详尽,因为它是执行SQL时的真实的执行计划。

<span>           SQL跟踪包括两个基本组成部分:
</span><span>           1. SQL跟踪:在当前会话或其他会话中启动跟踪。
</span><span><span>            2. tkprof工具:格式化跟踪文件,因为生成的跟踪文件对使用者不容易读取,使用该工具可以转换为使用者跟容易读取的格式。具体请参加《tkprof命令格式化分析跟踪文件》</span></span>
로그인 후 복사
<span><span>           <strong>启动跟踪的方式有:
</strong></span></span><span><span>             1. <span>启动</span>当前会话的跟踪
</span></span><span><span>             2.启动其他会话的跟踪
</span></span><span><span>             3.使用登陆触发器启动跟踪</span></span>
로그인 후 복사

           下面分别详细介绍3种跟踪启动的方式。

1.3.1 启动当前会话的跟踪

1.3.1.1启动当前会话跟踪的两种方法

             启动当前会话的跟踪的两种方法:

<span><span>             <strong> 1.设置参数</strong><span><strong>SQL_TRACE 为true</strong>,语句如下:
</span></span><span>  <span>                      ALTER SESSION SET </span></span><span><span>SQL_TRACE </span><span>= TRUE;</span></span></span>
로그인 후 복사

   该语句创建基本的跟踪,跟踪信息包括SQL语句的执行统计信息与执行计划,但不会包含绑定变量的

值,也不包含等待各种事件花费的时间。如果要获取这些信息,请使用第2种启动方式。

<span>              <strong> 2.<span>调用DBMS_SESSION方法</span></strong><span>,语法如下:</span>
</span><span><span><span>                      <span>DBMS_SESSION.session_trace_enable (
</span></span></span><span><span><span>                                   waits                IN         BOOLEAN    DEFAULT   TRUE,
</span></span></span><span><span><span>                                   binds                IN         BOOLEAN    DEFAULT   FALSE</span></span></span><span><span></span></span><span><span><span>                       );</span></span></span></span>
로그인 후 복사

                    下面介绍下函数参数的含义:

参数 说明
waits 如果为TRUE,将收集等待信息;如果为FALSE,则不收集。
binds 如果为TRUE,将收集绑定变量信息;如果为FALSE,则不收集。
<span></span>
로그인 후 복사

调用例子,在Command Window中输入如下命令:

<span></span>

begin
   dbms_session.session_trace_enable(true, 
                                     true);
end;
/  
로그인 후 복사

<span></span>

执行完后,执行如下语句查询是否执行成功:

<span></span>

SQL> SELECT t.sql_trace, t.sql_trace_waits, t.sql_trace_binds FROM v$session t WHERE t.sid = USERENV('SID');
SQL_TRACE SQL_TRACE_WAITS SQL_TRACE_BINDS
--------- --------------- ---------------
ENABLED   TRUE            TRUE
로그인 후 복사
收集的结果如下(tkprof工具格式化后):
SQL ID: 518m7y4zt6xkp<span><span><span>
Plan Hash: 1947974170
select * 
from
 t_student where gid = 1
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.01       0.01          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1      0.00       0.01          2          2          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.01       0.02          2          2          0           1
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 79  
Rows     Row Source Operation
-------  ---------------------------------------------------
      1  TABLE ACCESS BY INDEX ROWID T_STUDENT (cr=2 pr=2 pw=0 time=0 us cost=1 size=19 card=1)
      1   INDEX UNIQUE SCAN SYS_C0010947 (cr=1 pr=1 pw=0 time=0 us cost=0 size=0 card=1)(object id 73110)
Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       2        0.00          0.00
  SQL*Net message from client                     2        0.04          0.04
  Disk file operations I/O                        1        0.00          0.00
  db file sequential read                         2        0.01          0.01</span></span></span>
로그인 후 복사
   其中第20到26行就是时间等待信息,如果使用第1种方法启动跟踪信息,将没有这部分的内容。

1.3.1.2 定位跟踪文件

     启动会话跟踪之后,如何才能找到当前会话的跟踪文件呢?有两种方法

1.3.1.2.1 通过查询语句

        下面语句用来查询当前会话跟踪文件:

        select p.TRACEFILE from v$session s, v$process p
         where s.PADDR = p.ADDR
            and s.SID = USERENV('SID');

     说明:USERENV('SID')得到的是当前会话的SID。

        如下:

<span></span>

SQL> select p.TRACEFILE from v$session s, v$process p
  2           where s.PADDR = p.ADDR
  3              and s.SID = USERENV('SID');
TRACEFILE
--------------------------------------------------------------------------------
d:\oracle\diag\rdbms\david\orcl\trace\orcl_ora_7220.trc
로그인 후 복사

<span></span>

1.3.1.2.2 标识跟踪文件

       为会话指定一个跟踪文件的标识符,通过设置tracefile_identifier参数实现:
                      ALTER SESSION SET tracefile_identifier = 标识符    
        如果我们设定tracefile_identifier为LGL,即执行:  

SQL> alter session set tracefile_identifier=LGL;
로그인 후 복사
        那么跟踪文件目录中将生成一个类似orcl_ora_3668_LGL.trc格式的跟踪文件。
        跟踪文件的目录保存在user_dump_dest参数:
SQL> show parameter user_dump_dest;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                       string      d:\oracle\diag\rdbms\david\orcl\trace
로그인 후 복사

1.3.2 启动其他会话的跟踪

        通过DBMS_MONITOR包中的session_trace_enable()方法启动别的会话的跟踪,语法如下:

<span><span><span><span>                 <span>DBMS_MONITOR.<span>session_trace_enable(
</span></span></span></span></span><span><span><span><span><span>                          session_id                IN      BINARY       DEFAULT  NULL,
</span></span></span></span></span><span><span><span><span><span>                          serial_num                IN      BINARY       DEFAULT  NULL,
</span></span></span></span></span><span><span><span><span><span>                          waits                        IN      BOOLEAN    DEFAULT  TRUE,
</span></span></span></span></span><span><span><span><span><span>                          binds                       <span> IN      BOOLEAN    DEFAULT  FALSE
</span></span></span></span></span></span><span><span><span><span><span>                   )</span></span></span></span></span></span>
로그인 후 복사

          下面介绍下函数参数的含义:

<span></span>

参数
说明
session_id 对应V$SESSION视图中的列SID的值。
serial_num 对应V$SESSION视图中的列SERIAL#的值。
waits
如果为TRUE,将收集等待信息;如果为FALSE,则不收集。
binds
如果为TRUE,将收集绑定变量信息;如果为FALSE,则不收集。
      在使用该函数之前先通过查询V$SESSION查找要跟踪会话,比如查询实例名包含david的会话状态:<span></span>

<span></span>

SQL> SELECT t.sid, t.serial#, t.sql_trace FROM v$session t WHERE LOWER(t.service_name) LIKE '%david%';
       SID    SERIAL# SQL_TRACE
---------- ---------- ---------
         7        249 DISABLED
         8         41 ENABLED
        71        125 ENABLED
로그인 후 복사
<span><span>        通过上面查询结果可知SID为7的会话的没有启动会话跟踪,使用<span>session_trace_enable()方法启动SID为7的
</span></span></span><span><span><span>会话的跟踪,打开Command Window窗口,执行如下语句:</span></span></span>
로그인 후 복사

<span></span>

begin
   dbms_monitor.session_trace_enable(session_id       =>7,
                                     serial_num       =>249,
                                     waits            =>true, 
                                     binds            =>true);
end;
/ 
로그인 후 복사

            再次查询SID为7的会话跟踪情况,语句如下:

<span></span>

SQL> SELECT t.sid, t.serial#, t.sql_trace FROM v$session t WHERE t.sid = 7;
       SID    SERIAL# SQL_TRACE
---------- ---------- ---------
         7        249 ENABLED
로그인 후 복사

          从查询结果可以看出,SID为7的会话已经启动了跟踪。


1.3.3 使用登陆触发器启动跟踪

     建立一个触发器(执行到sys用户中),用户登录数据库之后就启动会话的跟踪,触发器创建脚本如下:

<span></span>

CREATE OR REPLACE TRIGGER trace_login_trigger
     AFTER LOGON ON DATABASE
BEGIN
   --设置用户ADMIN的会话跟踪
   IF  USER = 'ADMIN' THEN
       --设置跟踪文件标识
       EXECUTE IMMEDIATE 'alter session set tracefile_identifier=ADMINCC';
       
       --启动会话跟踪
       DBMS_SESSION.session_trace_enable( waits  =>TRUE,
                                          binds  =>FALSE
                                         );                                       
   END IF;
END;
/                                         
로그인 후 복사









본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Composer를 사용하여 WordPress 설치 및 업데이트의 복잡성을 해결하는 방법 Composer를 사용하여 WordPress 설치 및 업데이트의 복잡성을 해결하는 방법 Apr 17, 2025 pm 10:54 PM

WordPress 웹 사이트를 관리 할 때는 종종 설치, 업데이트 및 다중 사이트 변환과 같은 복잡한 작업이 발생합니다. 이러한 작업은 시간이 많이 걸릴뿐만 아니라 오류가 발생하기 쉬우므로 웹 사이트를 마비시킵니다. WP-CLI Core 명령을 Composer와 결합하면 이러한 작업을 크게 단순화하고 효율성과 안정성을 향상시킬 수 있습니다. 이 기사는 작곡가를 사용하여 이러한 문제를 해결하고 WordPress 관리의 편의성을 향상시키는 방법을 소개합니다.

SQL 구문 분석 문제를 해결하는 방법은 무엇입니까? Greenlion/PHP-SQL-Parser를 사용하십시오! SQL 구문 분석 문제를 해결하는 방법은 무엇입니까? Greenlion/PHP-SQL-Parser를 사용하십시오! Apr 17, 2025 pm 09:15 PM

SQL 문을 구문 분석 해야하는 프로젝트를 개발할 때 까다로운 문제가 발생했습니다. MySQL의 SQL 문을 효율적으로 구문 분석하고 주요 정보를 추출하는 방법. 많은 방법을 시도한 후 Greenlion/PHP-SQL-Parser 라이브러리가 내 요구를 완벽하게 해결할 수 있음을 발견했습니다.

PHP 코드 검사 가속화 : Overtrue/Phplint Library 사용 경험 및 실습 PHP 코드 검사 가속화 : Overtrue/Phplint Library 사용 경험 및 실습 Apr 17, 2025 pm 11:06 PM

개발 프로세스 중에는 종종 코드의 정확성과 유지 가능성을 보장하기 위해 PHP 코드에서 구문 검사를 수행해야합니다. 그러나 프로젝트가 커지면 단일 스레드 구문 검사 프로세스가 매우 느려질 수 있습니다. 최근에 저는 프로젝트 에서이 문제를 겪었습니다. 여러 가지 방법을 시도한 후 마침내 라이브러리 오버 트루/phplint를 발견하여 병렬 처리를 통해 코드 검사 속도를 크게 향상시킵니다.

Laravel의 관계 문제에 대한 복잡한 소속 문제를 해결하는 방법은 무엇입니까? 작곡가를 사용하십시오! Laravel의 관계 문제에 대한 복잡한 소속 문제를 해결하는 방법은 무엇입니까? 작곡가를 사용하십시오! Apr 17, 2025 pm 09:54 PM

Laravel Development에서 복잡한 모델 관계를 다루는 것은 항상 어려운 관계와 관련하여 도전이되었습니다. 최근에, 나는 전통적인 Hasmanythrough 관계가 요구를 충족시키지 못해 데이터 쿼리가 복잡하고 비효율적이되는 다단계 모델 관계를 다루는 프로젝트 에서이 문제를 발견했습니다. 약간의 탐사 후, 나는 도서관 Staudenmeir/Sogle-Strough를 발견했으며, 이는 작곡가를 통해 내 문제를 쉽게 설치하고 해결했습니다.

웹 사이트 성능을 최적화하는 방법 : 미니 라이브러리 사용에서 배운 경험 및 교훈 웹 사이트 성능을 최적화하는 방법 : 미니 라이브러리 사용에서 배운 경험 및 교훈 Apr 17, 2025 pm 11:18 PM

웹 사이트를 개발하는 과정에서 페이지 로딩을 개선하는 것은 항상 최우선 과제 중 하나였습니다. 일단 웹 사이트의 성능을 향상시키기 위해 CSS 및 JavaScript 파일을 압축하고 병합하기 위해 Miniify 라이브러리를 사용해 보았습니다. 그러나 사용 중에 많은 문제와 도전에 직면하여 결국 Miniify가 더 이상 최선의 선택이 아닐 수도 있음을 깨달았습니다. 아래에서는 내 경험과 작곡가를 통해 미수를 설치하고 사용하는 방법을 공유 할 것입니다.

SQL의 목적 : MySQL 데이터베이스와 상호 작용합니다 SQL의 목적 : MySQL 데이터베이스와 상호 작용합니다 Apr 18, 2025 am 12:12 AM

SQL은 MySQL 데이터베이스와 상호 작용하여 데이터 첨가, 삭제, 수정, 검사 및 데이터베이스 설계를 실현하는 데 사용됩니다. 1) SQL은 Select, Insert, Update, Delete 문을 통해 데이터 작업을 수행합니다. 2) 데이터베이스 설계 및 관리에 대한 생성, 변경, 삭제 문을 사용하십시오. 3) 복잡한 쿼리 및 데이터 분석은 SQL을 통해 구현되어 비즈니스 의사 결정 효율성을 향상시킵니다.

작곡가를 사용하여 CSS 접두사 문제 해결 : Padaliyajay/PHP-AUTOPREFIXER 라이브러리의 연습 작곡가를 사용하여 CSS 접두사 문제 해결 : Padaliyajay/PHP-AUTOPREFIXER 라이브러리의 연습 Apr 17, 2025 pm 11:27 PM

프론트 엔드 프로젝트를 개발할 때 까다로운 문제가 있습니다. 호환성을 보장하기 위해 CSS 속성에 브라우저 접두사를 수동으로 추가해야합니다. 이것은 시간이 많이 걸릴뿐만 아니라 오류가 발생하기 쉽습니다. 약간의 탐사 후, 나는 Padaliyajay/PHP-AutoPrefixer 라이브러리를 발견하여 작곡가로 쉽게 문제를 해결했습니다.

데이터베이스 연결 문제 해결 : Minii/DB 라이브러리 사용 실질적인 사례 데이터베이스 연결 문제 해결 : Minii/DB 라이브러리 사용 실질적인 사례 Apr 18, 2025 am 07:09 AM

작은 응용 프로그램을 개발할 때 까다로운 문제가 발생했습니다. 가벼운 데이터베이스 운영 라이브러리를 신속하게 통합해야합니다. 여러 라이브러리를 시도한 후에는 기능이 너무 많거나 호환되지 않는다는 것을 알았습니다. 결국, 나는 내 문제를 완벽하게 해결하는 YII2를 기반으로 단순화 된 버전 인 Minii/DB를 발견했습니다.

See all articles