Rumah pangkalan data tutorial mysql 越界值导致执行计划走错

越界值导致执行计划走错

Jun 07, 2016 pm 03:05 PM
pelanggan membawa kepada melaksanakan rancangan berjumpa

最近客户生产上遇到一个统计信息陈旧涉及的 越界 值查询 导致 执行 计划 走错的案例: SQL查询 bankdate = '2013/03/19' 就走到了不合适的索引 IDX_DSF_BANKAPPLHISTORY_02. 下面的 执行 计划 可以忽略DSF_BANKCODE这块。 下面的 执行 计划 可以忽略DSF_BANK

最近客户生产上遇到一个统计信息陈旧涉及的越界值查询导致执行计划走错的案例:

SQL查询bankdate >= '2013/03/19' 就走到了不合适的索引IDX_DSF_BANKAPPLHISTORY_02.

下面的执行计划可以忽略DSF_BANKCODE这块。


下面的执行计划可以忽略DSF_BANKCODE这块。


SQL> select *
  2    from dsf_bankapplhistory t
  3   where (((((bankdate >= '2013/03/19' and
  4         recordnum = 'P00Y0ABFG1E220120204358') and monthnm = '16') and
  5         bankcode in
  6         (select bankcode
  7               from dsf_bankcode
  8              where (bankcode = '800000000000' or
  9                    get_bankcode = '800000000000'))) and flag = '2') and
 10         opertype = '1')
 11  /

Execution Plan
----------------------------------------------------------
Plan hash value: 3875365240

-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     1 |   631 |     6   (0)| 00:00:01 |
|   1 |  NESTED LOOPS SEMI           |                            |     1 |   631 |     6   (0)| 00:00:01 |
|*  2 |   TABLE ACCESS BY INDEX ROWID| DSF_BANKAPPLHISTORY        |     1 |   605 |     4   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | IDX_DSF_BANKAPPLHISTORY_02 |     1 |       |     3   (0)| 00:00:01 |
|*  4 |   TABLE ACCESS BY INDEX ROWID| DSF_BANKCODE               |     2 |    52 |     2   (0)| 00:00:01 |
|*  5 |    INDEX RANGE SCAN          | IDX_BANKCODE_1             |     1 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("FLAG"='2' AND "RECORDNUM"='P00Y0ABFG1E220120204358' AND "MONTHNM"='16' AND
              "OPERTYPE"='1')
   3 - access("BANKDATE">='2013/03/19')
   4 - filter("GET_BANKCODE"='800000000000' OR "BANKCODE"='800000000000')
   5 - access("BANKCODE"="BANKCODE")



生产上的这条SQL语句走错了索引,本身应该走到索引IDX_DSF_BANKAPPLHISTORY_10的,缺走了IDX_DSF_BANKAPPLHISTORY_02。

?2个索引的情况如下:
?
? IDX_DSF_BANKAPPLHISTORY_10(RECORDNUM,MONTHNM??)?
? IDX_DSF_BANKAPPLHISTORY_02(BANKDATE)?


如果查询采用bankdate >= '2013/03/18' 就能走到正确的索引。

SQL> select *
  2    from dsf_bankapplhistory t
  3   where (((((bankdate >= '2013/03/18' and
  4         recordnum = 'P00Y0ABFG1E220120204358') and monthnm = '16') and
  5         bankcode in
  6         (select bankcode
  7               from dsf_bankcode
  8              where (bankcode = '800000000000' or
  9                    get_bankcode = '800000000000'))) and flag = '2') and
 10         opertype = '1')
 11  /

Execution Plan
----------------------------------------------------------
Plan hash value: 1807757810

-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     1 |   631 |     7   (0)| 00:00:01 |
|   1 |  NESTED LOOPS SEMI           |                            |     1 |   631 |     7   (0)| 00:00:01 |
|*  2 |   TABLE ACCESS BY INDEX ROWID| DSF_BANKAPPLHISTORY        |     1 |   605 |     5   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | IDX_DSF_BANKAPPLHISTORY_10 |     1 |       |     4   (0)| 00:00:01 |
|*  4 |   TABLE ACCESS BY INDEX ROWID| DSF_BANKCODE               |     2 |    52 |     2   (0)| 00:00:01 |
|*  5 |    INDEX RANGE SCAN          | IDX_BANKCODE_1             |     1 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("FLAG"='2' AND "BANKDATE">='2013/03/18' AND "OPERTYPE"='1')
   3 - access("RECORDNUM"='P00Y0ABFG1E220120204358' AND "MONTHNM"='16')
   4 - filter("GET_BANKCODE"='800000000000' OR "BANKCODE"='800000000000')
   5 - access("BANKCODE"="BANKCODE")
   
采用3月18日之前的日期都能走到正确的索引,而采用3月19日及其之后日期都会走到错误的IDX_DSF_BANKAPPLHISTORY_02索引上。

其实3月18日和3月19日走索引idx_dsf_bankapplhistory_10的成本都没有变化。

SQL> select  /*+index(t,idx_dsf_bankapplhistory_10)*/*
  2    from dsf_bankapplhistory t
  3   where (((((bankdate >= '2013/03/18' and
  4         recordnum = 'P00Y0ABFG1E220120204358') and monthnm = '16') and
  5         bankcode in
  6         (select bankcode
  7               from dsf_bankcode
  8              where (bankcode = '800000000000' or
  9                    get_bankcode = '800000000000'))) and flag = '2') and
 10         opertype = '1');

Execution Plan
----------------------------------------------------------
Plan hash value: 1807757810

-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     1 |   631 |     7   (0)| 00:00:01 |
|   1 |  NESTED LOOPS SEMI           |                            |     1 |   631 |     7   (0)| 00:00:01 |
|*  2 |   TABLE ACCESS BY INDEX ROWID| DSF_BANKAPPLHISTORY        |     1 |   605 |     5   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | IDX_DSF_BANKAPPLHISTORY_10 |     1 |       |     4   (0)| 00:00:01 |
|*  4 |   TABLE ACCESS BY INDEX ROWID| DSF_BANKCODE               |     2 |    52 |     2   (0)| 00:00:01 |
|*  5 |    INDEX RANGE SCAN          | IDX_BANKCODE_1             |     1 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("FLAG"='2' AND "BANKDATE">='2013/03/18' AND "OPERTYPE"='1')
   3 - access("RECORDNUM"='P00Y0ABFG1E220120204358' AND "MONTHNM"='16')
   4 - filter("GET_BANKCODE"='800000000000' OR "BANKCODE"='800000000000')
   5 - access("BANKCODE"="BANKCODE")





SQL> select  /*+index(t,idx_dsf_bankapplhistory_10)*/*
  2    from dsf_bankapplhistory t
  3   where (((((bankdate >= '2013/03/19' and
  4         recordnum = 'P00Y0ABFG1E220120204358') and monthnm = '16') and
  5         bankcode in
  6         (select bankcode
  7               from dsf_bankcode
  8              where (bankcode = '800000000000' or
  9                    get_bankcode = '800000000000'))) and flag = '2') and
 10         opertype = '1')
 11  /

Execution Plan
----------------------------------------------------------
Plan hash value: 1807757810

-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     1 |   631 |     7   (0)| 00:00:01 |
|   1 |  NESTED LOOPS SEMI           |                            |     1 |   631 |     7   (0)| 00:00:01 |
|*  2 |   TABLE ACCESS BY INDEX ROWID| DSF_BANKAPPLHISTORY        |     1 |   605 |     5   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | IDX_DSF_BANKAPPLHISTORY_10 |     1 |       |     4   (0)| 00:00:01 |
|*  4 |   TABLE ACCESS BY INDEX ROWID| DSF_BANKCODE               |     2 |    52 |     2   (0)| 00:00:01 |
|*  5 |    INDEX RANGE SCAN          | IDX_BANKCODE_1             |     1 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("FLAG"='2' AND "BANKDATE">='2013/03/19' AND "OPERTYPE"='1')
   3 - access("RECORDNUM"='P00Y0ABFG1E220120204358' AND "MONTHNM"='16')
   4 - filter("GET_BANKCODE"='800000000000' OR "BANKCODE"='800000000000')
   5 - access("BANKCODE"="BANKCODE")

而3月18日和3月19日走索引idx_dsf_bankapplhistory_02的成本却降低了1,而估算出的基数也降为1,导致CBO选择了这个错误的索引。

SQL> select  /*+index(t,idx_dsf_bankapplhistory_02)*/*
  2    from dsf_bankapplhistory t
  3   where (((((bankdate >= '2013/03/18' and
  4         recordnum = 'P00Y0ABFG1E220120204358') and monthnm = '16') and
  5         bankcode in
  6         (select bankcode
  7               from dsf_bankcode
  8              where (bankcode = '800000000000' or
  9                    get_bankcode = '800000000000'))) and flag = '2') and
 10         opertype = '1')
 11  /

Execution Plan
----------------------------------------------------------
Plan hash value: 3875365240

-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     1 |   631 |     7   (0)| 00:00:01 |
|   1 |  NESTED LOOPS SEMI           |                            |     1 |   631 |     7   (0)| 00:00:01 |
|*  2 |   TABLE ACCESS BY INDEX ROWID| DSF_BANKAPPLHISTORY        |     1 |   605 |     5   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | IDX_DSF_BANKAPPLHISTORY_02 |    21 |       |     3   (0)| 00:00:01 |
|*  4 |   TABLE ACCESS BY INDEX ROWID| DSF_BANKCODE               |     2 |    52 |     2   (0)| 00:00:01 |
|*  5 |    INDEX RANGE SCAN          | IDX_BANKCODE_1             |     1 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("FLAG"='2' AND "RECORDNUM"='P00Y0ABFG1E220120204358' AND "MONTHNM"='16' AND
              "OPERTYPE"='1')
   3 - access("BANKDATE">='2013/03/18')
   4 - filter("GET_BANKCODE"='800000000000' OR "BANKCODE"='800000000000')
   5 - access("BANKCODE"="BANKCODE")
   
SQL> select  /*+index(t,idx_dsf_bankapplhistory_02)*/*
  2    from dsf_bankapplhistory t
  3   where (((((bankdate >= '2013/03/19' and
  4         recordnum = 'P00Y0ABFG1E220120204358') and monthnm = '16') and
  5         bankcode in
  6         (select bankcode
  7               from dsf_bankcode
  8              where (bankcode = '800000000000' or
  9                    get_bankcode = '800000000000'))) and flag = '2') and
 10         opertype = '1')
 11  /

Execution Plan
----------------------------------------------------------
Plan hash value: 3875365240

-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     1 |   631 |     6   (0)| 00:00:01 |
|   1 |  NESTED LOOPS SEMI           |                            |     1 |   631 |     6   (0)| 00:00:01 |
|*  2 |   TABLE ACCESS BY INDEX ROWID| DSF_BANKAPPLHISTORY        |     1 |   605 |     4   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | IDX_DSF_BANKAPPLHISTORY_02 |     1 |       |     3   (0)| 00:00:01 |
|*  4 |   TABLE ACCESS BY INDEX ROWID| DSF_BANKCODE               |     2 |    52 |     2   (0)| 00:00:01 |
|*  5 |    INDEX RANGE SCAN          | IDX_BANKCODE_1             |     1 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("FLAG"='2' AND "RECORDNUM"='P00Y0ABFG1E220120204358' AND "MONTHNM"='16' AND
              "OPERTYPE"='1')
   3 - access("BANKDATE">='2013/03/19')
   4 - filter("GET_BANKCODE"='800000000000' OR "BANKCODE"='800000000000')
   5 - access("BANKCODE"="BANKCODE")
   
3月18日估算出的基数为21,而3月19日估算出的基数为1(实际上这里估算出的基数应该为0,但一般CBO不允许CARDINALITY为0)。

经查询统计信息过于陈旧:

SQL> select table_name,last_analyzed from dba_tables where table_name='DSF_BANKAPPLHISTORY';

TABLE_NAME           LAST_ANALYZED
-------------------- -------------------
DSF_BANKAPPLHISTORY  2012-11-25 21:17:26

这很容易让人联想到越界值的查询,对于越界值的查询将会导致选择性的线性降低,如下图所示:





下面的查询可以查询到BANKDATE的最大和最小值。

SQL> declare
  2     v_high_date date;
  3     v_low_date  date;
  4     v_high_value dba_tab_col_statistics.high_value%type;
  5     v_low_value  dba_tab_col_statistics.low_value%type;
  6  begin
  7     select high_value,low_value into v_high_value,v_low_value
  8     from dba_tab_col_statistics 
  9     where table_name='DSF_BANKAPPLHISTORY' and column_name='BANKDATE';
 10     dbms_stats.convert_raw_value(v_high_value,v_high_date);
 11     dbms_stats.convert_raw_value(v_low_value,v_low_date);
 12     dbms_output.put_line('high date:'||to_char(v_high_date,'YYYY-MM-DD HH24:MI:SS'));
 13     dbms_output.put_line('low  date:'||to_char(v_low_date,'YYYY-MM-DD HH24:MI:SS'));
 14  end;
 15  /
high date:2012-11-25 00:00:00
low  date:2012-08-03 00:00:00

PL/SQL procedure successfully completed.



为什么3月19日是转折点,下面的查询可以解析这一点:

SQL> select date '2012-11-25'+(date '2012-11-25' - date '2012-08-03') from dual;

DATE'2012-11-25'+11
-------------------
2013-03-19 00:00:00

其实还有一个转折点就是2012-04-11

SQL> select date '2012-08-03'-(date '2012-11-25' - date '2012-08-03') from dual;

DATE'2012-08-03'-(D
-------------------
2012-04-11 00:00:00

下面我们来看看2012-04-11这个查询的执行计划







SQL> select  *
  2    from dsf_bankapplhistory t
  3   where bankdate
  4         recordnum = 'P00Y0ABFG1E220120204358' and monthnm = '16'
  5  /

Execution Plan
----------------------------------------------------------
Plan hash value: 471247677

----------------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                            |     1 |   605 |     4   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS BY INDEX ROWID| DSF_BANKAPPLHISTORY        |     1 |   605 |     4   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IDX_DSF_BANKAPPLHISTORY_02 |     1 |       |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("RECORDNUM"='P00Y0ABFG1E220120204358' AND "MONTHNM"='16')
   2 - access("BANKDATE"

SQL> select  *
  2    from dsf_bankapplhistory t
  3   where bankdate
  4         recordnum = 'P00Y0ABFG1E220120204358' and monthnm = '16'
  5  /

Execution Plan
----------------------------------------------------------
Plan hash value: 477419360

----------------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                            |     1 |   605 |     5   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS BY INDEX ROWID| DSF_BANKAPPLHISTORY        |     1 |   605 |     5   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IDX_DSF_BANKAPPLHISTORY_10 |     1 |       |     4   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("BANKDATE"
   2 - access("RECORDNUM"='P00Y0ABFG1E220120204358' AND "MONTHNM"='16')







Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Skrip Python akan dilaksanakan setiap 5 minit Skrip Python akan dilaksanakan setiap 5 minit Sep 10, 2023 pm 03:33 PM

Automasi dan penjadualan tugas memainkan peranan penting dalam menyelaraskan tugasan berulang dalam pembangunan perisian. Bayangkan terdapat skrip Python yang perlu dilaksanakan setiap 5 minit, seperti mendapatkan data daripada API, melakukan pemprosesan data atau menghantar kemas kini berkala. Menjalankan skrip secara manual dengan kerap boleh memakan masa dan terdedah kepada ralat. Di sinilah penjadualan tugas masuk. Dalam catatan blog ini, kami akan meneroka cara menjadualkan skrip Python untuk dilaksanakan setiap 5 minit, memastikan ia berjalan secara automatik tanpa campur tangan manual. Kami akan membincangkan kaedah dan perpustakaan berbeza yang boleh digunakan untuk mencapai matlamat ini, membolehkan anda mengautomasikan tugas dengan cekap. Cara mudah untuk menjalankan skrip Python setiap 5 minit menggunakan fungsi time.sleep() ialah menggunakan tim

Cara menggunakan Python untuk skrip dan pelaksanaan di Linux Cara menggunakan Python untuk skrip dan pelaksanaan di Linux Oct 05, 2023 am 11:45 AM

Cara menggunakan Python untuk menulis dan melaksanakan skrip dalam Linux Dalam sistem pengendalian Linux, kita boleh menggunakan Python untuk menulis dan melaksanakan pelbagai skrip. Python ialah bahasa pengaturcaraan ringkas dan berkuasa yang menyediakan banyak perpustakaan dan alatan untuk menjadikan skrip lebih mudah dan lebih cekap. Di bawah ini kami akan memperkenalkan langkah asas cara menggunakan Python untuk penulisan dan pelaksanaan skrip dalam Linux, dan menyediakan beberapa contoh kod khusus untuk membantu anda memahami dan menggunakannya dengan lebih baik. Pasang Python

Tidak boleh keluar dari program pratonton win11 Tidak boleh keluar dari program pratonton win11 Jun 29, 2023 pm 12:04 PM

Tidak boleh keluar dari program pratonton win11? Apabila kita menggunakan sistem win11, program pratonton win11 akan dilancarkan pada komputer untuk kita gunakan Namun, ada rakan-rakan yang tidak mahu menggunakan program pratonton ini bagaimana untuk keluar, editor di bawah Kami telah menyusun panduan tutorial untuk keluar dari Program Pengalaman Dalam Win11 Jika anda berminat, mari lihat di bawah! Panduan tutorial untuk keluar dari Program Win11 Insider 1. Mula-mula tekan kekunci pintasan "win+i" untuk memasuki Tetapan Windows dan klik "Kemas Kini dan Keselamatan". 2. Kemudian klik "Program Windows Insider" dalam bar tugas kiri, seperti yang ditunjukkan dalam rajah. 3. Pada ketika ini anda boleh melihat pengalaman di sebelah kanan

Huawei P70 memulakan Pelan Perintis secara langsung dan dijual secara rasmi Huawei P70 memulakan Pelan Perintis secara langsung dan dijual secara rasmi Apr 19, 2024 pm 01:58 PM

Berita Zhongguancun: Pada pagi 18 April, Huawei secara tiba-tiba mengumumkan bahawa telefon mudah alih siri P70 dijual secara rasmi di bawah Pelan Perintis yang ingin membeli harus bersedia untuk mengambil tindakan, telefon bimbit unggulan Huawei sangat popular dan akan sentiasa kehabisan stok. Kali ini siri Huawei P70 telah dinamakan semula sebagai Pura, yang bermaksud tulen. Sebelum ini, Yu Chengdong dari Huawei berkata: Sejak 2012, telefon pintar siri P Huawei seperti rakan kongsi setia, menemani ratusan juta pengguna di seluruh dunia untuk menghabiskan detik-detik berharga yang tidak terkira banyaknya dan bersama-sama menyaksikan keindahan dan keseronokan hidup. Beliau amat merasakan bahawa kepercayaan dan kasih sayang yang diberikan oleh setiap pengguna yang memilih siri P Huawei adalah sama dengan daya penggerak yang kuat, sentiasa memberi inspirasi kepada Huawei untuk bergerak maju dengan teguh di atas jalan inovasi. Pura bermaksud suci.

Bagaimana untuk menulis kod PHP dalam penyemak imbas dan mengekalkan kod daripada dilaksanakan? Bagaimana untuk menulis kod PHP dalam penyemak imbas dan mengekalkan kod daripada dilaksanakan? Mar 10, 2024 pm 02:27 PM

Bagaimana untuk menulis kod PHP dalam penyemak imbas dan mengekalkan kod daripada dilaksanakan? Dengan pempopularan Internet, semakin ramai orang mula berhubung dengan pembangunan web, dan pembelajaran PHP juga telah menarik lebih banyak perhatian. PHP ialah bahasa skrip yang berjalan di bahagian pelayan dan sering digunakan untuk menulis halaman web dinamik. Walau bagaimanapun, semasa fasa latihan, kami mahu dapat menulis kod PHP dalam penyemak imbas dan melihat hasilnya, tetapi kami tidak mahu kod itu dilaksanakan. Jadi, bagaimana untuk menulis kod PHP dalam penyemak imbas dan mengelakkannya daripada dilaksanakan? Ini akan diterangkan secara terperinci di bawah. pertama,

Bagaimana untuk melakukan ujian Brown-Forsythe dalam Python Bagaimana untuk melakukan ujian Brown-Forsythe dalam Python Aug 31, 2023 pm 11:53 PM

Ujian Brown-Forsythe ialah ujian statistik yang digunakan untuk menentukan sama ada varians dua atau lebih kumpulan adalah sama. Ujian Levene menggunakan sisihan mutlak daripada min, manakala ujian Brown-Forsythe menggunakan sisihan daripada median. Hipotesis nol yang digunakan dalam ujian adalah seperti berikut - H0: Varians kumpulan (populasi) adalah sama Hipotesis alternatif ialah varians tidak sama - H1: Varians kumpulan (populasi) tidak sama melaksanakan ujian, kami mengira median setiap kumpulan dan korelasinya dengan median. Sisihan mutlak bilangan digit. Kami kemudian mengira statistik F berdasarkan varians sisihan ini. Andaikan bahawa statistik F yang dikira adalah lebih besar daripada nilai kritikal dalam jadual taburan F. Dalam kes ini, kami menolak hipotesis nol dan membuat kesimpulan bahawa varians kumpulan adalah tidak sama. Dalam Python, sc

Copilot Integrasi: Kerjasama dalam SharePoint dan Dynamics 365 Customer Service Copilot Integrasi: Kerjasama dalam SharePoint dan Dynamics 365 Customer Service Aug 03, 2023 pm 09:21 PM

Microsoft hari ini mengumumkan pratonton awal integrasi SharePoint dengan Copilot dalam Dynamics 365 Customer Service. Penyepaduan ini akan memberikan akses kepada ejen perkhidmatan pelanggan kepada rangkaian sumber pengetahuan yang lebih luas, menghasilkan peningkatan produktiviti dan interaksi pelanggan yang lebih baik. Pada masa ini, Copilot dalam Dynamics365 Customer Service memanfaatkan pangkalan pengetahuan dalaman untuk memberikan panduan kepada ejen perkhidmatan pelanggan. Dengan mencadangkan kandungan sembang dan draf e-mel, Copilot telah menjadi alat utama untuk meningkatkan produktiviti pasukan perkhidmatan pelanggan anda. Walau bagaimanapun, maklum balas pelanggan menunjukkan bahawa alat itu perlu memanfaatkan pengetahuan daripada sumber luaran seperti SharePoint. Integrasi Pemacu Kolaboratif SharePoint Sebagai tindak balas kepada maklum balas ini,

Tajuk baharu: Rusia menggalakkan peningkatan industri mikroelektronik: membangunkan rancangan baharu Tajuk baharu: Rusia menggalakkan peningkatan industri mikroelektronik: membangunkan rancangan baharu Oct 12, 2023 pm 11:05 PM

Menurut berita pada 12 Oktober, Rusia telah mencapai kemajuan penting dalam bidang mikroelektronik. Kementerian Perindustrian dan Perdagangan Rusia baru-baru ini mencadangkan pelan hala tuju pembangunan mikroelektronik baharu yang bertujuan untuk meningkatkan tahap teknologi semikonduktor negara. Difahamkan bahawa syarikat mikroelektronik Rusia pada masa ini mampu menghasilkan produk cip dengan proses 130-nanometer, dan matlamat baharu mereka adalah untuk mencapai pengeluaran berskala besar cip 65-nanometer pada tahun 2026, diikuti dengan rancangan untuk mengeluarkan cip 28-nanometer di dalam negara. pada tahun 2027, dan pada Langkah untuk mencapai pengeluaran besar-besaran cip 14nm menjelang 2030 telah mendapat pujian yang tinggi oleh pakar tempatan, yang percaya bahawa kemajuan teknologi ini akan membantu Rusia menghasilkan komputer riba mampu milik berdasarkan teknologi sumber terbuka seperti Linux dan RISC-V Last tahun, kerajaan Rusia

See all articles