mysql中單表查詢的成本

大家好。我們知道MySQL在執行一個查詢時,經常會有多個執行方案,然后從中選取成本最低或者說代價最低的方案去真正的執行查詢。今天我們來聊一聊單表查詢的成本。

那么到底什么是成本呢?這里我們說的成本或者代價是由兩方面組成的:

I/O成本: 我們的表經常使用的MyISAM、InnoDB存儲引擎都是將數據和索引都存儲到磁盤上的,當我們想查詢表中的記錄時,需要先把數據或者索引加載到內存中然后再操作。這個從磁盤到內存這個加載的過程損耗的時間稱之為I/O 成本。

CPU成本: 取以及檢測記錄是否滿足對應的搜索條件、對結果集進行排序等這些操作損耗的時間稱之為CPU成本。

對于InnoDB存儲引擎來說,頁是磁盤和內存之間交互的基本單位。MySQL 規定讀取一個頁面花費的成本默認是1.0 ,讀取以及檢測一條記錄是否符合搜索條件的成本默認是0.2。1.0、0.2這些數字稱之為成本常數,這兩個成本常數我們最常用到,其余的成本常數今天先不談。 注意:不管讀取記錄時需不需要檢測是否滿足搜索條件,其成本都算是0.2。

一、單表查詢的成本

為了方便講解,我們先創建下面這個表:

CREATE TABLE single_table ( id INT NOT NULL AUTO_INCREMENT, key1 VARCHAR(100), key2 INT, key3 VARCHAR(100), key_part1 VARCHAR(100), key_part2 VARCHAR(100), key_part3 VARCHAR(100), common_field VARCHAR(100), PRIMARY KEY (id), KEY idx_key1 (key1), UNIQUE KEY idx_key2 (key2), KEY idx_key3 (key3), KEY idx_key_part(key_part1, key_part2, key_part3) 
);

在這張表中我們默認插入了10000條數據,下面我們就以這個表來探討一下如何基于成本進行優化。

1、基于成本的優化步驟

在一條單表查詢語句真正執行之前,MySQL的查詢優化器會找出執行該語句所有可能使用的方案,對比之后找出成本最低的方案,這個成本最低的方案就是所謂的執行計劃,之后才會調用存儲引擎提供的接口真正的執行查詢,這個過程總結一下就是這樣:

  1. 根據搜索條件,找出所有可能使用的索引。
  2. 計算全表掃描的代價。
  3. 計算使用不同索引執行查詢的代價。
  4. 對比各種執行方案的代價,找出成本最低的那一個。

下邊我們通過這個sql語句來一步一步分析一下這四步:

SELECT * FROM single_table WHERE key1 IN ('a', 'b', 'c') AND  key2 > 10 AND key2 < 1000 AND  key3 > key2 AND  key_part1 LIKE '%hello%' AND common_field = '123';

1、根據搜索條件,找出所有可能使用的索引。

對于B+樹索引來說,只要索引列和常數使用=、<=>、IN、NOT IN、IS NULL 、IS NOT NULL 、> 、< 、>= 、<= 、BETWEEN、!= (不等于也可以寫成 <> )或者 LIKE 操作符連接起來,就可以產生一個所謂的范圍區間(LIKE匹配字符串前綴也行),也就是說這些搜索條件都可能使用到索引。一個查詢中可能使用到的索引稱之為possible keys。

我們分析一下上邊查詢中涉及到的幾個搜索條件:

key1 IN (‘a’, ‘b’, ‘c’) 可以使用二級索引 idx_key1 。
key2 > 10 AND key2 < 1000可以使用二級索引 idx_key2 。
key3 > key2 這個搜索條件的索引列由于沒有和常數比較,所以并不能使用到索引。
key_part1 LIKE ‘%hello%’ , key_part1 通過 LIKE 操作符和以通配符開頭的字符串做比較,不可以使用索引。
common_field = ‘123’,由于該列沒有索引,所以不會用到索引。

綜上所述,上邊的查詢語句可能用到的索引,也就是possible keys 只有 idx_key1 和 idx_key2 。

2、計算全表掃描的代價。

對于InnoDB 存儲引擎來說,全表掃描的意思就是把聚簇索引中的記錄都依次和給定的搜索條件做一下比較,把符合搜索條件的記錄加入到結果集,所以需要將聚簇索引對應的頁面加載到內存中,然后再檢測記錄是否符合搜索條件。由于查詢成本=I/O 成本+CPU 成本,所以計算全表掃描的代價需要兩個信息:聚簇索引占用的頁面數和該表中的記錄數。

MySQL每個表維護了一系列的統計信息,我們可以通過SHOW TABLE STATUS語句來查看表的統計信息,如果要看指定的某個表的統計信息,在該語句后加對應的 LIKE 語句就 好了,比方說我們要查看single_table 這個表的統計信息可以這么寫:
在這里插入圖片描述

雖然出現了很多統計選項,但我們目前只關心兩個:

Rows(本選項表示表中的記錄條數): 對于使用MyISAM 存儲引擎的表來說該值是準確的,對于使用InnoDB存儲引擎的表來說,該值是一個估計值。從查詢結果我們也可以看出來,由于我們的single_table 表是使用 InnoDB 存儲引擎的,所以雖然實際上表中有10000條記錄,但是SHOW TABLE STATUS 顯示的 Rows 值是10033條記錄。
Data_length(本選項表示表占用的存儲空間字節數): 使用MyISAM存儲引擎的表來說,該值就是數據文件的大小,對于使用InnoDB 存儲引擎的表來說,該值就相當于聚簇索引占用的存儲空間大小,也就是說可以這樣計算該值的大小:

Data_length = 聚簇索引的頁面數量 x 每個頁面的大小。

single_table 使用默認16KB 的頁面大小,而上邊查詢結果顯示 Data_length 的值是1589248 ,所以我們可以反向來推導出聚簇索引的頁面數量: 聚簇索引的頁面數量 = 1589248 ÷ 16 ÷ 1024 = 97。

我們現在已經得到了聚簇索引占用的頁面數量以及該表記錄數的估計值,所以就可以計算全表掃描成本了。但是MySQL在真實計算成本時會進行一些微調,但是由于這些微調的值十分的小,并不影響我們分析。

現在可以看一下全表掃描成本的計算過程:

I/O 成本 97 x 1.0 + 1.1 = 98.1

97 指的是聚簇索引占用的頁面數,1.0指的是加載一個頁面的成本常數,后邊的1.1是一個微調值,我們不用在意。

CPU 成本: 10033x 0.2 + 1.0 = 2007.6

10033指的是統計數據中表的記錄數,對于InnoDB 存儲引擎來說是一個估計值,0.2指的是訪問一條記錄所需的成本常數,后邊的1.0是一個微調值,我們不用在意。

總成本: 98.1 + 2007.6 = 2105.7 綜上所述,對于single_table 的全表掃描所需的總成本就是 2105.7 。

注意:我們前邊說過表中的記錄其實都存儲在聚簇索引對應B+樹的葉子節點中,所以只要我們通過根節點獲得了最左邊的葉子節點,就可以沿著葉子節點組成的雙向鏈表把所有記錄都查看一遍。也就是說全表掃描這個過程其實有的B+樹內節點是不需要訪問的,但是MySQL在計算全表掃描成本時直接使用聚簇索引占用的頁面數作為計算I/O成本的依據,是不區分內節點和葉子節點的。

3、 計算使用不同索引執行查詢的代價。

從第1步分析我們得到,查詢可能使用到idx_key1 和 idx_key2 這兩個索引,我們需要分別分析單獨使用這些索引執行查詢的成本,最后還要分析是否可能使用到索引合并。這里需要注意的是,MySQL查詢優化器先分析使用唯一二級索引的成本,再分析使用普通索引的成本,所以我們也先分析idx_key2的成本,然后再看使用 idx_key1 的成本。

1. 使用 idx_key2 執行查詢的成本分析: idx_key2 對應的搜索條件是:key2 > 10 AND key2 < 1000,對應的范圍區間就是:(10, 1000) , 所以使用idx_key2 搜索的示意圖如下所示:
在這里插入圖片描述

對于使用二級索引 + 回表方式的查詢,MySQL計算這種查詢的成本依賴兩個方面的數據:

范圍區間數量: 不論某個范圍區間的二級索引到底占用了多少頁面,查詢優化器都認為讀取索引的一個范圍區間的I/O 成本和讀取一個頁面是相同的。

本例中使用idx_key2 的范圍區間只有一個:(10, 1000) ,所以相當于訪問這個范圍區間的二級索引付出的I/O成本就是:1 x 1.0 = 1.0。

需要回表的記錄數: 優化器需要計算二級索引的某個范圍區間到底包含多少條記錄,對于本例來說就是計算idx_key2在(10, 1000) 這個范圍區間中包含多少二級索引記錄,計算過程是這樣的:

步驟1:先根據key2 > 10這個條件訪問一下idx_key2對應的B+ 樹索引,找到滿足 key2 > 10 這個條件的第一條記錄,我們把這條記錄稱之為區間最左記錄。

步驟2:然后再根據key2 < 1000這個條件繼續從 idx_key2 對應的 B+ 樹索引中找出第一條滿足這個條件的記錄,我們把這條記錄稱之為區間最右記錄。

步驟3:如果區間最左記錄和區間最右記錄相隔不太遠,那就可以精確統計出滿足key2 > 10 AND key2 < 1000 條件的二級索引記錄條數。否則只沿著區間最左記錄向右讀10個頁面,計算平均每個頁面中包含多少記錄,然后用這個平均值乘以區間最左記錄和區間最右記錄之間的頁面數量就可以了。

那么問題又來了,怎么估計區間最左記錄和區間最右記錄之間有多少個頁面呢?解決這個問題還得回到B+樹索引的結構中來:
在這里插入圖片描述

如圖,我們假設區間最左記錄在頁b中,區間最右記錄在頁c中,那么我們想計算區間最左記錄和區間最右記錄之間的頁面數量就相當于計算頁b和頁c之間有多少頁面,而每一條目錄項記錄都對應一個數據頁,所以計算頁b和頁c之間有多少頁面就相當于計算它們父節點(也就是 頁a)中對應的目錄項記錄之間隔著幾條記錄。

如果頁b和頁c之間的頁面非常多,以至于頁b和頁c對應的目錄項記錄都不在一個頁面中時,就再統計頁b和頁c對應的目錄項記錄所在頁之間有多少個頁面,依次類推。

根據上述算法測得 idx_key2 在區間 (10, 1000) 之間大約有 95 條記錄。讀取這95條二級索引記錄需要付出的CPU成本就是:95 x 0.2 + 0.01 = 19.01 其中95是需要讀取的二級索引記錄條數,0.2是讀取一條記錄成本常數,0.01是微調。

在通過二級索引獲取到記錄之后,還需要干兩件事兒:

根據這些記錄里的主鍵值到聚簇索引中做回表操作: MySQL認為每次回表操作都相當于訪問一個頁面,也就是說二級索引范圍區間有多少記 錄,就需要進行多少次回表操作,也就是需要進行多少次頁面I/O。

我們上邊統計了使用 idx_key2 二級索引執行查詢時,預計有95條二級索引記錄需要進行回表操作,所以回表操作帶來的I/O成本就是:95 x 1.0 = 95.0。其中95是預計的二級索引記錄數,1.0是一個頁面的I/O成本常數。

回表操作后得到的完整用戶記錄,然后再檢測其他搜索條件是否成立: 回表操作的本質就是通過二級索引記錄的主鍵值到聚簇索引中找到完整的用戶記錄,然后再檢測除 key2 > 10 AND key2 < 1000 這個搜索條件以外的搜索條件是否成立。

因為我們通過范圍區間獲取到二級索引記錄共95條,也就對應著聚簇索引中95條完整的用戶記錄,讀取并檢測這些完整的用戶記錄是否符合其余的搜索條件的CPU成本就是: 95 x 0.2 = 19.0。其中95是待檢測記錄的條數,0.2是檢測一條記錄是否符合給定的搜索條件的成本常數。

所以本例中使用idx_key2 執行查詢的成本就如下所示:

I/O 成本: 1.0 + 95 x 1.0 = 96.0 (范圍區間的數量 + 預估的二級索引記錄條數)

CPU 成本: 95 x 0.2 + 0.01 + 95 x 0.2 = 38.01 (讀取二級索引記錄的成本 + 讀取并檢測回表后聚簇索 引記錄的成本)

綜上所述,使用idx_key2 執行查詢的總成本就是:96.0 + 38.01 = 134.01。

2. 使用 idx_key1 執行查詢的成本分析: idx_key1 對應的搜索條件是:key1 IN (‘a’, ‘b’, ‘c’) ,也就是說相當于3個單點區間:[‘a’, ‘a’]、[‘b’, ‘b’]和[‘c’, ‘c’]。使用idx_key1 搜索的示意圖如下:
在這里插入圖片描述

與使用idx_key2 的情況類似,我們也需要計算使用 idx_key1 時需要訪問的范圍區間數量以及需要回表的記錄數:

范圍區間數量: 使用idx_key1 執行查詢時很顯然有3個單點區間,所以訪問這3個范圍區間的二級索引付出的I/O成本就是:3 x 1.0 = 3.0。

需要回表的記錄數: 由于使用idx_key1 時有3個單點區間,所以每個單點區間都需要查找一遍對應的二級索引記錄數:

查找單點區間[‘a’, ‘a’] 對應的二級索引記錄數:計算單點區間對應的二級索引記錄數和計算連續范圍區間對應的二級索引記錄數是一樣的,都是先計算區間最左記錄和區間最右記錄,然后再計算它們之間的記錄數。最后計算得到單點區間[‘a’, ‘a’] 對應的二級索引記錄數是:35 。

查找單點區間[‘b’, ‘b’] 對應的二級索引記錄數:與上同理,計算得到本單點區間對應的記錄數是:44。

查找單點區間[‘c’, ‘c’] 對應的二級索引記錄數:與上同理,計算得到本單點區間對應的記錄數是:39。

所以,這三個單點區間總共需要回表的記錄數就是:35 + 44 + 39 = 118,讀取這些二級索引記錄的CPU成本就是:118 x 0.2 + 0.01 = 23.61。

得到總共需要回表的記錄數之后,我們還要考慮以下幾點:

根據這些記錄里的主鍵值到聚簇索引中做回表操作:所需的I/O成本就是:118 x 1.0 = 118.0。

回表操作后得到的完整用戶記錄,然后再比較其他搜索條件是否成立:此步驟對應的CPU 成本就是:118 x 0.2 = 23.6

所以本例中使用idx_key1 執行查詢的成本就如下所示:

I/O 成本:3.0 + 118 x 1.0 = 121.0 (范圍區間的數量 + 預估的二級索引記錄條數)

CPU 成本:118 x 0.2 + 0.01 + 118 x 0.2 = 47.21 (讀取二級索引記錄的成本 + 讀取并檢測回表后聚簇 索引記錄的成本)

綜上所述,使用idx_key1 執行查詢的總成本就是:121.0 + 47.21 = 168.21

3. 是否有可能使用索引合并( Index Merge ): 本例中有關key1 和 key2 的搜索條件是使用 AND 連接起來的,而對于idx_key1 和 idx_key2 都是范圍查詢,也就是說查找到的二級索引記錄并不是按照主鍵值進行排序的,并不滿足使用Intersection 索引合并的條件,所以并不會使用索引合并。

4、對比各種執行方案的代價,找出成本最低的那一個

下邊把執行本例中的查詢的各種可執行方案以及它們對應的成本列出來:

全表掃描的成本:2105.7
使用idx_key2 的成本:134.01
使用idx_key1 的成本:168.21

很顯然,使用idx_key2 的成本最低,所以當然選擇 idx_key2 來執行查詢。

2、基于索引統計數據的成本計算

有時候使用索引執行查詢時會有許多單點區間,比如使用IN語句就很容易產生非常多的單點區間,比如下邊這個查詢(語句中的…表示還有很多參數):

SELECT * FROM single_table WHERE key1 IN ('aa1', 'aa2', 'aa3', ... , 'zzz');

很顯然,這個查詢可能使用到的索引就是idx_key1 ,由于這個索引并不是唯一二級索引,所以并不能確定一個單點區間對應的二級索引記錄的條數有多少,需要我們去計算。計算方式我們上邊已經介紹過了,就是先獲取索 引對應的B+樹的區間最左記錄和區間最右記錄,然后再計算這兩條記錄之間有多少記錄(記錄條數少的時候可以做到精確計算,多的時候只能估算)。這種通過直接訪問索引對應的B+樹來計算某個范圍區間對應的索引記錄條數的方式稱之為index dive。

有零星幾個單點區間的話,使用index dive 的方式去計算這些單點區間對應的記錄數也不是什么問題,但是如果單點區間多的話,比如IN語句里有20000個參數,這就意味著MySQL 的查詢優化器為了計算這些單點區間對應的索引記錄條數,要進行20000次index dive 操作,這性能損耗會很大。

為了防止這種情況, MySQL提供了一個系統變量 eq_range_index_dive_limit ,如果我們的IN語句中的參數個數小于eq_range_index_dive_limit 的話,將使用index dive的方式計算各個單點區間對應的記錄條數,如果大于或等于eq_range_index_dive_limit 個的話,可就不能使用index dive了,要使用所謂的索引統計數據來進行估算。

像會為每個表維護一份統計數據一樣,MySQL也會為表中的每一個索引維護一份統計數據,查看某個表中索引的統計數據可以使用SHOW INDEX FROM 表名的語法,比如我們查看一下 single_table 的各個索引的統計數據:
在這里插入圖片描述

下面我們介紹一下這些屬性:

屬性名描述
Table索引所屬表的名稱。
Non_unique索引列的值是否是唯一的,聚簇索引和唯一二級索引的該列值為0,普通二級索引該列值為1。
Key_name索引的名稱。
Seq_in_index索引列在索引中的位置,從1開始計數。比如對于聯合索引idx_key_part來說,key_part1、key_part2和key_part3 對應的位置分別是1、2、3。
Column_name索引列的名稱。
Collation索引列中的值是按照何種排序方式存放的,值為A時代表升序存放,為NULL時代表降序存放。
Cardinality索引列中不重復值的數量。
Sub_part對于存儲字符串或者字節串的列來說,有時候我們只想對這些串的前n個字符或字節建立索引,這個屬性表示的就是那個n值。如果對完整的列建立索引的話,該屬性的值就是NULL。
Packed索引列如何被壓縮,NULL值表示未被壓縮。
Null這個屬性我們暫時不了解,可以先忽略掉。
Index_type該索引列是否允許存儲NULL值。
Comment使用索引的類型,我們最常見的就是BTREE,其實也就是B+樹索引。
Index_comment索引列注釋信息。 索引注釋信息。

上述屬性中我們現在最在意的是Cardinality 屬性, Cardinality 直譯過來就是基數的意思,表示索引列中不重復值的個數。比如對于一個一萬行記錄的表來說,某個索引列的Cardinality屬性是10000,那意味著該列中沒有重復的值,如果Cardinality屬性是1的話,就意味著該列的值全部是重復的。

注意:對于InnoDB存儲引擎來說,使用SHOW INDEX語句展示出來的某個索引列的Cardinality屬性是一個估計值,并不是精確的。

前邊說道,當IN語句中的參數個數大于或等于系統變量eq_range_index_dive_limit 的值的話,就不會使用index dive的方式計算各個單點區間對應的索引記錄條數,而是使用索引統計數據,這里所指的索引統計數據指的是這兩個值:

使用SHOW TABLE STATUS 展示出的 Rows 值,也就是一個表中有多少條記錄。

使用SHOW INDEX 語句展示出的 Cardinality 屬性。

結合上一個Rows 統計數據,我們可以針對索引列,計算出平均一個值重復多少次。一個值的重復次數 ≈ Rows ÷ Cardinality。

以single_table 表的 idx_key1 索引為例,它的 Rows 值是 10033,它對應索引列 key1 的 Cardinality 值也是 10033,所以我們可以計算key1 列平均單個值的重復次數就是:10033÷ 10033=1(條)。

此時再看上邊那條查詢語句:

SELECT * FROM single_table WHERE key1 IN ('aa1', 'aa2', 'aa3', ... , 'zzz');

假設IN 語句中有20000個參數的話,就直接使用統計數據來估算這些參數需要單點區間對應的記錄條數了,每個參數對應1條記錄,所以總共需要回表的記錄數就是:20000 x 1 = 20000 使用統計數據來計算單點區間對應的索引記錄條數可比index dive 的方式簡單多了,但是它的致命弱點就是:不精確!使用統計數據算出來的查詢成本與實際所需的成本可能相差非常大。

好了,到這里我們就講完了,今天我們主要講了成本是什么以及單表查詢如何計算成本,歡迎大家在評論區留言討論,也希望大家能給作者點個關注,謝謝大家!最后依舊是請各位老板有錢的捧個人場,沒錢的也捧個人場,謝謝各位老板!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17984.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17984.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17984.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【踩坑】編譯opencv將python (for build) python2.7改為python3

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你&#xff0c;歡迎[點贊、收藏、關注]哦~ 出現問題 默認是2.7 解決方案 cmake時候添加&#xff1a; -D PYTHON_DEFAULT_EXECUTABLE$(which python3)

詳盡的Ubuntu 24.04 LTS安裝指南

Ubuntu安裝過程涉及多個步驟&#xff0c;下面是一個詳盡的Ubuntu 24.04 LTS安裝指南 ### 一、準備工作 **1. 系統要求** * **CPU**&#xff1a;至少2GHz雙核處理器。 * **內存**&#xff1a;推薦4GB或以上。 * **硬盤**&#xff1a;建議至少預留25GB可用空間。 * **U盤**&am…

02 Prometheus入門安裝教程

02 Prometheus入門安裝教程 大家好&#xff0c;我是秋意零。今天分享一篇入門級Prometheus安裝教程。 環境準備 三臺Linux虛擬機&#xff08;一臺也可以&#xff09; 準備Prometheus、相關組件安裝包 Prometheus官網下載安裝包比較慢&#xff0c;如果沒有魔法。可關注公眾號…

【UnityUI程序框架】The PureMVC Framework核心你會用嗎

&#x1f468;?&#x1f4bb;個人主頁&#xff1a;元宇宙-秩沅 &#x1f468;?&#x1f4bb; hallo 歡迎 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;?&#x1f4bb; 本文由 秩沅 原創 &#x1f468;?&#x1f4bb; 收錄于專欄&#xff1a;Uni…

Python | Leetcode Python題解之第105題從前序與中序遍歷序列構造二叉樹

題目&#xff1a; 題解&#xff1a; class Solution:def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:if not preorder:return Noneroot TreeNode(preorder[0])stack [root]inorderIndex 0for i in range(1, len(preorder)):preorderVal pr…

rxjava BehaviorProcessor特性和使用說明

概念和說明 BehaviorProcessor 的定義 BehaviorProcessor 是 FlowableProcessor 的一個具體實現&#xff0c;它同時具備發布和訂閱的能力。它會保存最新的一個事件&#xff0c;并在新訂閱者訂閱時&#xff0c;立即將該事件發送給新訂閱者。 主要特性 緩存最新事件&#xff…

計算機畢業設計python+spark天氣預測 天氣可視化 天氣大數據 空氣質量檢測 空氣質量分析 氣象大數據 氣象分析 大數據畢業設計 大數據畢設

摘 要 近些年大數據人工智能等技術發展迅速&#xff0c;我國工業正努力從“制造”邁向“智造”實現新跨越。神經網絡(NeuronNetwork)是一種計算模型&#xff0c;通過大量數據的學習&#xff0c;來發現數據之間的模式和規律&#xff0c;模仿人腦神經元的工作方式。隨著算力的提…

音視頻集市應用融合平臺方案

音視頻應用即有深度又有廣度&#xff0c;如何讓一個平臺擁有更多功能更靈活的拓展能力&#xff0c;從單體模塊化&#xff0c;多插件到微服務都有大量的實踐。 筆者在實際開發過程也同樣面對這些紛繁復雜而又必須共容共通需求的挑戰。 在實戰開發了大量從服務端到設備端再到瀏覽…

vos3000外呼系統如何查詢授權信息和系統并發

要查詢VOS3000外呼系統的授權信息和系統并發情況&#xff0c;您可以按照以下步驟進行&#xff1a; 登錄系統管理界面&#xff1a; 使用管理員賬號登錄VOS3000外呼系統的管理界面。 查找系統信息&#xff1a; 尋找系統信息或授權管理的相關選項或標簽。 查詢授權信息&#xff…

五篇季度思想匯報

季度思想匯報一 尊敬的黨組織&#xff1a; 時光荏苒&#xff0c;轉眼間一個季度又過去了。在這一季度里&#xff0c;我經歷了許多&#xff0c;也有了不少的感悟和成長。 在工作中&#xff0c;我積極投入&#xff0c;努力提升自己的專業技能&#xff0c;面對各種任務和挑戰&am…

Linux:IPC - System V

Linux&#xff1a;IPC - System V 共享內存 shm創建共享內存shmgetshmctlftok 掛接共享內存shmatshmdt shm特性 消息隊列 msgmsggetmsgctlmsgsndmsgrcv 信號量 semSystem V 管理機制 System V IPC 是Linux系統中一種重要的進程間通信機制&#xff0c;它主要包括共享內存 shm&am…

物理內存與虛擬內存的區別

物理內存和虛擬內存是計算機系統中重要的概念&#xff0c;它們有著不同的特點和作用。 物理內存&#xff1a; 物理內存是計算機實際存在的內存&#xff0c;通常指的是RAM&#xff08;隨機存取存儲器&#xff09;。物理內存直接映射到計算機的物理地址空間&#xff0c;可以直接被…

? 傳知代碼 ? 高速公路車輛速度檢測軟件

&#x1f49b;前情提要&#x1f49b; 本文是傳知代碼平臺中的相關前沿知識與技術的分享~ 接下來我們即將進入一個全新的空間&#xff0c;對技術有一個全新的視角~ 本文所涉及所有資源均在傳知代碼平臺可獲取 以下的內容一定會讓你對AI 賦能時代有一個顛覆性的認識哦&#x…

【NumPy】全面解析NumPy的where函數:高效條件操作指南

&#x1f9d1; 博主簡介&#xff1a;阿里巴巴嵌入式技術專家&#xff0c;深耕嵌入式人工智能領域&#xff0c;具備多年的嵌入式硬件產品研發管理經驗。 &#x1f4d2; 博客介紹&#xff1a;分享嵌入式開發領域的相關知識、經驗、思考和感悟&#xff0c;歡迎關注。提供嵌入式方向…

哈希沖突的常見解決方法【附C++代碼】

在C中&#xff0c;哈希表是一種常用的數據結構&#xff0c;用于實現快速的插入、刪除和查找操作。 哈希表的核心在于哈希函數&#xff0c;它將輸入的關鍵字轉換為一個數組索引。然而&#xff0c;不同的關鍵字可能映射到相同的索引&#xff0c;這種情況稱為哈希沖突。 有效地解…

走進全球LED顯示龍頭艾比森,深挖逆勢增長43%的數智化邏輯

在大環境不景氣的情況下&#xff0c;有一家智能制造企業在2023年營收40億&#xff0c;同比增長高達43%&#xff0c;海外營收增長約 46%&#xff0c;并且連續12年單品牌出口額第一。 這就是全球LED顯示龍頭艾比森。 5月9日&#xff0c;紛享銷客帶領近70位企業高管走進紛享銷客…

使用Nginx將服務器目錄、文件共享出來

1.配置映射路徑&#xff0c;加入映射目錄 location /abc/ { autoindex on; autoindex_localtime on; charset utf-8; alias /usr/mydir/; } 2.重載Nginx配置 nginx -s reload 3.訪問 http://XXX.XXX.XXX.XXX/abc/ 即可 注&#xff1a; 如果…

短視頻再度重逢:四川京之華錦信息技術公司

短視頻再度重逢 在數字化時代的浪潮中&#xff0c;短視頻以其獨特的魅力迅速崛起&#xff0c;成為現代人生活中不可或缺的一部分。而當我們談論起短視頻&#xff0c;我們不僅僅是在談論一種娛樂方式&#xff0c;更是在談論一種情感的載體&#xff0c;一種回憶的媒介。今天&…

PHP8.0 match函數

match 表達式是 PHP 8.0 引入的一個新的控制結構&#xff0c;它提供了一種簡潔且更強大的方式來進行條件匹配。與 switch 語句相比&#xff0c;match 表達式具有以下優勢&#xff1a; 返回值&#xff1a;match 是一個表達式&#xff0c;它會返回一個值。嚴格比較&#xff1a;m…

MyBatis系統學習篇 - MyBatis逆向工程

MyBatis的逆向工程是指根據數據庫表結構自動生成對應的Java實體類、Mapper接口和XML映射文件的過程。逆向工程可以幫助開發人員快速生成與數據庫表對應的代碼&#xff0c;減少手動編寫重復代碼的工作量。 我們在MyBatis中通過逆向工具來幫我簡化繁瑣的搭建框架&#xff0c;減少…