亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                深入理解select count(*)

                深入理解select count(*)

                深入理解select count(*)底層究竟做了什么

                2019-06-11 12:58·Java技術(shù)架構(gòu)

                專(zhuān)注于Java領(lǐng)域優(yōu)質(zhì)技術(shù),歡迎關(guān)注

                作者:賈春生

                SELECT COUNT( * ) FROM t是個(gè)再常見(jiàn)不過(guò)的 SQL 需求了。在 MySQL 的使用規(guī)范中,我們一般使用事務(wù)引擎 InnoDB 作為(一般業(yè)務(wù))表的存儲(chǔ)引擎,在此前提下,COUNT( * )操作的時(shí)間復(fù)雜度為 O(N),其中 N 為表的行數(shù)。

                而 MyISAM 表中可以快速取到表的行數(shù)。這些實(shí)踐經(jīng)驗(yàn)的背后是怎樣的機(jī)制,以及為什么需要/可以是這樣,就是此文想要探討的。

                先來(lái)看一下概況: MySQL COUNT( * ) 在 2 種存儲(chǔ)引擎中的部分問(wèn)題:

                下面就帶著這些問(wèn)題,以 InnoDB 存儲(chǔ)引擎為主來(lái)進(jìn)行討論。


                一、InnoDB 全表 COUNT( * )

                主要問(wèn)題:

                • 執(zhí)行過(guò)程是怎樣的?
                • 如何計(jì)算 count?影響 count 結(jié)果的因素有哪些?
                • count 值存在哪里?涉及的數(shù)據(jù)結(jié)構(gòu)是怎樣的?
                • 為什么 InnoDB 只能通過(guò)掃表來(lái)實(shí)現(xiàn) count( * )?(見(jiàn)本文最后的問(wèn)題)
                • 全表COUNT( * )作為 table scan 類(lèi)型操作的一個(gè) case,有什么風(fēng)險(xiǎn)?
                • COUNT(* )操作是否會(huì)像SELECT *一樣可能讀取大字段涉及的溢出頁(yè)?

                1. 執(zhí)行框架 – 循環(huán): 讀取 + 計(jì)數(shù)

                1.1 基本結(jié)論

                • 全表掃描,一個(gè)循環(huán)解決問(wèn)題。
                • 循環(huán)內(nèi): 先讀取一行,再?zèng)Q定該行是否計(jì)入 count。
                • 循環(huán)內(nèi)是一行一行進(jìn)行計(jì)數(shù)處理的。

                1.2 說(shuō)明

                簡(jiǎn)單 SELELCT-SQL 的執(zhí)行框架,類(lèi)比 INSERT INTO … SELECT 是同樣的過(guò)程。

                下面會(huì)逐步細(xì)化如何讀取與計(jì)數(shù) ( count++ ) 。

                2. 執(zhí)行過(guò)程

                引述: 執(zhí)行過(guò)程部分,分為 4 個(gè)部分:

                • COUNT( * )前置流程: 從 Client 端發(fā) SQL 語(yǔ)句,到 MySQL-Server端執(zhí)行 SELECT 之前,為后面的一些闡述做一鋪墊。
                • COUNT( * ) 流程: 簡(jiǎn)要給出代碼層面的流程框架及 2 個(gè)核心步驟的重點(diǎn)調(diào)用棧部分。
                • 讀取一行: 可見(jiàn)性及 row_search_mvcc函數(shù),介紹可見(jiàn)性如何影響 COUNT( * ) 結(jié)果。
                • 計(jì)數(shù)一行: Evaluate_join_record與列是否為空,介紹計(jì)數(shù)過(guò)程如何影響 COUNT( * )結(jié)果。

                如果讀者希望直接看如何進(jìn)行 COUNT( * ),那么也可以忽略 (1),而直接跳到 (2) 開(kāi)始看。

                2.1 COUNT( * ) 前置流程回憶 – 從 Client 端發(fā) SQL 到 sub_select 函數(shù)

                為了使看到的調(diào)用過(guò)程不太突兀,我們還是先回憶一下如何執(zhí)行到 sub_select函數(shù)這來(lái)的:

                1.MySQL-Client 端發(fā)送 SQL 語(yǔ)句,根據(jù) MySQL 通信協(xié)議封包發(fā)送。

                2.Mysql-Server端接收數(shù)據(jù)包,由協(xié)議解析出 command 類(lèi)型 ( QUERY ) 及 SQL 語(yǔ)句 ( 字符串 ) 。

                3.SQL 語(yǔ)句經(jīng)過(guò)解析器解析輸出為 JOIN類(lèi)的對(duì)象,用于結(jié)構(gòu)化地表達(dá)該 SQL 語(yǔ)句。

                PS: 這里的 JOIN 結(jié)構(gòu),不僅僅是純語(yǔ)法結(jié)構(gòu),而是已經(jīng)進(jìn)行了語(yǔ)義處理,粗略地說(shuō),匯總了表的列表 (table_list )、目標(biāo)列的列表 (target_list )、WHERE 條件、子查詢(xún)等語(yǔ)法結(jié)構(gòu)。在全表 COUNT( * )-case 中,table_list = [表“t”(別名也是“t”)],target_list = [目標(biāo)列對(duì)象(列名為“COUNT( * )”)],當(dāng)然這里沒(méi)有 WHERE 條件、子查詢(xún)等結(jié)構(gòu)。

                4.JOIN對(duì)象有 2 個(gè)重要的方法: JOIN::optimize(), JOIN::exec(),分別用于進(jìn)行查詢(xún)語(yǔ)句的優(yōu)化 和 查詢(xún)語(yǔ)句的執(zhí)行。

                join->optimize(),優(yōu)化階段 (稍后 myisam 下全表 count( * )操作會(huì)涉及這里的一點(diǎn)內(nèi)容)。

                join->exec(),執(zhí)行階段 ( 重點(diǎn) ),包含了 InnoDB 下全表count( * ) 操作的執(zhí)行流程。

                5.join->exec() 經(jīng)過(guò)若干調(diào)用,將調(diào)用到sub_select函數(shù)來(lái)執(zhí)行簡(jiǎn)單 SQL,包括 COUNT( * ) 。

                6.END of sub_select 。

                2.2 COUNT( * ) 流程 ( 于 sub_select 函數(shù)中 )

                上層的流程與代碼是比較簡(jiǎn)單的,集中在 sub_select 函數(shù)中,其中 2 類(lèi)函數(shù)分別對(duì)應(yīng)于前面”執(zhí)行框架”部分所述的 2 個(gè)步驟 – 讀取、計(jì)數(shù)。先給出結(jié)論如下:

              1. 讀取一行:從相對(duì)頂層的 sub_select 函數(shù)經(jīng)過(guò)一番調(diào)用,最終所有分支將調(diào)用到 row_search_mvcc 函數(shù)中,該函數(shù)就是用于從 InnoDB 存儲(chǔ)引擎所存儲(chǔ)的B+-tree結(jié)構(gòu)中讀取一行到內(nèi)存中的一個(gè) buf (uchar * ) 中,待后續(xù)處理使用。
              2. 這里會(huì)涉及行鎖的獲取、MVCC 及行可見(jiàn)性的問(wèn)題。當(dāng)然對(duì) 于 SELECT COUNT( * ) 這類(lèi)快照讀而言,只會(huì)涉及 MVCC 及其可見(jiàn)性,而不涉及行鎖。詳情可跳至“可見(jiàn)性與 row_search_mvcc 函數(shù)”部分。
              3. 計(jì)數(shù)一行: 代碼層面,將會(huì)在 evaluate_join_record函數(shù)中對(duì)所讀取的行進(jìn)行評(píng)估,看其是否應(yīng)當(dāng)計(jì)入 count中 ( 即是否要count++ )。
              4. 簡(jiǎn)單來(lái)說(shuō),COUNT(arg) 本身為 MySQL 的函數(shù)操作,對(duì)于一行來(lái)說(shuō),若括號(hào)內(nèi)的參數(shù) arg ( 某列或整行 )的值若不是 NULL,則 count++,否則對(duì)該行不予計(jì)數(shù)。詳情可跳至“ Evaluate_join_record 與列是否為空”部分。

                這兩個(gè)階段對(duì) COUNT( * )結(jié)果的影響如下: (兩層過(guò)濾)

                SQL 層流程框架相關(guān)代碼摘要如下:

                Q: 代碼層面,第一步驟(讀取一行)有 2 個(gè)分支,為什么?

                A:從 InnoDB 接口層面考慮,分為 “讀第一行” 和 “讀下一行”,是 2 個(gè)不同的執(zhí)行過(guò)程,讀第一行需要找到一個(gè) ( cursor ) 位置并做一些初始化工作讓后續(xù)的過(guò)程可遞歸。

                正如我們?nèi)绻媚_本/程序來(lái)進(jìn)行逐行的掃表操作,實(shí)現(xiàn)上就會(huì)涉及下面 2 個(gè) SQL:

                // SELECT id FROM t LIMIT 1; OR SELECT MIN(id)-1 FROM t; -> $last_id// SELECT id FROM t WHERE id > $last_id LIMIT 1;

                具體涉及到此例的代碼,SQL 層到存儲(chǔ)引擎層的調(diào)用關(guān)系,讀取階段的調(diào)用棧如下:(供參考)

                我們可以看到,無(wú)論是哪一個(gè)分支的讀取,最終都殊途同歸于 row_search_mvcc函數(shù)。

                以上是對(duì) LOOP 中的代碼做一些簡(jiǎn)要的說(shuō)明,下面來(lái)看 row_search_mvcc與 evaluate_join_record 如何輸出最終的 count 結(jié)果。

                2.3 行可見(jiàn)性及 row_search_mvcc 函數(shù)

                這里我們主要通過(guò)一組 case 和幾個(gè)問(wèn)題來(lái)看行可見(jiàn)性對(duì) COUNT( * ) 的影響。

                Q:對(duì)于SELECT COUNT( * ) FROM t或者SELECT MIN(id) FROM t操作,第一次的讀行操作讀到的是表 t 中 ( B+ 樹(shù)最左葉節(jié)點(diǎn) page 內(nèi) ) 的最小記錄嗎?( ha_index_first 為何也調(diào)用 row_search_mvcc 來(lái)獲取最小 key 值?)

                A:不一定。即使是MIN ( id ) 也不一定就讀取的是 id 最小的那一行,因?yàn)橐餐瑯佑行锌梢?jiàn)性的問(wèn)題,實(shí)際上 index_read 取到的是 當(dāng)前事務(wù)內(nèi)語(yǔ)句可見(jiàn)的最小 index 記錄。這也反映了前面提到的 join_read_first 與 join_read_next “殊途同歸”到 row_search_mvcc 是理所應(yīng)當(dāng)?shù)摹?/p>

                Q:針對(duì)圖中最后一問(wèn),如果事務(wù) X 是 RU ( Read-Uncommitted ) 隔離級(jí)別,且 C-Insert ( 100 ) 的完成是在 X-count( * )執(zhí)行過(guò)程中 ( 僅掃描到 5 或 10 這條記錄 ) 完成的,那么 X-count( * ) 在事務(wù) C-Insert ( 100 ) 完成后,能否在之后的讀取過(guò)程中看到 100 這條記錄呢?

                A:MySQL 采取”讀到什么就是什么”的策略,即X-count( * )在后面可以讀到 100 這條記錄。

                2.4 evaluate_join_record 與列是否為空

                Q:某一行如何計(jì)入 count?

                A:兩種情況會(huì)將所讀的行計(jì)入 count:

                1、如果 COUNT 函數(shù)中的參數(shù)是某列,則會(huì)判斷所讀行中該列定義是否 Nullable以及該列的值是否為 NULL;若兩者均為是,則不會(huì)計(jì)入 count,否則將計(jì)入 count。

                • e.g. SELECT COUNT(col_name) FROM t
                • col_name可以是主鍵、唯一鍵、非唯一鍵、非索引字段

                2、如果 COUNT 中帶有 * ,則會(huì)判斷這部分的整行是否為 NULL,如果判斷參數(shù)為 NULL,則忽略該行,否則 count++。

                • e.g-1. SELECT COUNT(*) FROM t
                • e.g-2. SELECT COUNT(B.*) FROM A LEFT JOIN B ON A.id = B.id

                Q: 特別地,對(duì)于 SELECT COUNT(id) FROM t,其中 id 字段是表 t 的主鍵,則如何?

                A:效果上等價(jià)于 COUNT( * )。因?yàn)闊o(wú)論是 COUNT( * ),還是 COUNT ( pk_col ) 都是因?yàn)橛兄麈I從而充分?jǐn)喽ㄋ魅?shù)據(jù)不為 NULL,這類(lèi) COUNT 表達(dá)式可以用于獲取當(dāng)前可見(jiàn)的表行數(shù)。

                Q: 用戶(hù)層面對(duì) InnoDB COUNT( * ) 的優(yōu)化操作問(wèn)題

                A:這個(gè)問(wèn)題是業(yè)界熟悉的一個(gè)問(wèn)題,掃描非空唯一鍵可得到表行數(shù),但所涉及的字節(jié)數(shù)可能會(huì)少很多(在表的行長(zhǎng)與主鍵、唯一鍵的長(zhǎng)度相差較多時(shí)),相對(duì)的 IO 代價(jià)小很多。

                相關(guān)調(diào)用棧參考如下:


                二、數(shù)據(jù)結(jié)構(gòu):

                Q:count 值存儲(chǔ)在哪個(gè)內(nèi)存變量里?

                A:SQL 解析后,存儲(chǔ)于表達(dá) COUNT( * ) 這一項(xiàng)中,((Item_sum_count*)item_sum)->count

                如下圖所示回顧我們之前“COUNT( * )前置流程”部分提到的 JOIN 結(jié)構(gòu)。

                即 SQL 解析器為每個(gè) SQL 語(yǔ)句進(jìn)行結(jié)構(gòu)化,將其放在一個(gè) JOIN 對(duì)象 ( join ) 中來(lái)表達(dá)。在該對(duì)象中創(chuàng)建并填充了一個(gè)列表 result_field_list 用于存放結(jié)果列,列表中每個(gè)元素則是一個(gè)結(jié)果列的 ( Item_result_field*) 對(duì)象 ( 指針 ) 。

                在 COUNT( * )-case 中,結(jié)果列列表只包含一個(gè)元素,( Item_sum_count: public Item_result_field ) 類(lèi)型對(duì)象 ( name = “COUNT( * )”),其中該類(lèi)所特有的成員變量 count即為所求。


                三、MyISAM 全表 COUNT( * )

                由于 MyISAM引擎并不常用于實(shí)際業(yè)務(wù)中,僅做簡(jiǎn)要描述如下:

              5. MyISAM-COUNT( * ) 操作是 O(1) 時(shí)間復(fù)雜度的操作。
              6. 每張MyISAM表中存放了一個(gè) meta 信息-count 值,在內(nèi)存中與文件中各有一份,內(nèi)存中的 count 變量值通過(guò)讀取文件中的 count 值來(lái)進(jìn)行初始化。
              7. SELECT COUNT( * ) FROM t 會(huì)直接讀取內(nèi)存中的表 t 對(duì)應(yīng)的 count 變量值。
              8. 內(nèi)存中的 count 值與文件中的 count 值由寫(xiě)操作來(lái)進(jìn)行更新,其一致性由表級(jí)鎖來(lái)保證。
              9. 表級(jí)鎖保證的寫(xiě)入串行化使得,同一時(shí)刻所有用戶(hù)線(xiàn)程的讀操作要么被鎖,要么只會(huì)看到一種數(shù)據(jù)狀態(tài)。

              10. 四、幾個(gè)問(wèn)題

                Q:MyISAM 與 InnoDB 在 COUNT( * ) 操作的執(zhí)行過(guò)程在哪里開(kāi)始分道揚(yáng)鑣?

                • 共性:共性存在于 SQL 層,即 SQL 解析之后的數(shù)據(jù)結(jié)構(gòu)是一致的,count 變量都是存在于作為結(jié)果列的 Item_sum_count 類(lèi)型對(duì)象中;返回給客戶(hù)端的過(guò)程也類(lèi)似 – 對(duì)該 count 變量進(jìn)行賦值并經(jīng)由 MySQL 通信協(xié)議返回給客戶(hù)端。
                • 區(qū)別:InnoDB 的 count 值計(jì)算是在 SQL 執(zhí)行階段進(jìn)行的;而 MyISAM表本身在內(nèi)存中有一份包含了表 row_count 值的 meta 信息,在 SQL 優(yōu)化階段通過(guò)存儲(chǔ)引擎的標(biāo)記給優(yōu)化器一個(gè) hint,表明該表所用的存儲(chǔ)引擎保存了精確行數(shù),可以直接獲取到,無(wú)需再進(jìn)入執(zhí)行器。

                Q:InnoDB 中為何無(wú)法向 MyISAM 一樣維護(hù)住一個(gè) row_count 變量?

                A:從 MVCC 機(jī)制與行可見(jiàn)性問(wèn)題中可得到原因,每個(gè)事務(wù)所看到的行可能是不一樣的,其 count( * )結(jié)果也可能是不同的;反過(guò)來(lái)看,則是 MySQL-Server 端無(wú)法在同一時(shí)刻對(duì)所有用戶(hù)線(xiàn)程提供一個(gè)統(tǒng)一的讀視圖,也就無(wú)法提供一個(gè)統(tǒng)一的 count 值。

                PS: 對(duì)于多個(gè)訪(fǎng)問(wèn) MySQL 的用戶(hù)線(xiàn)程 ( COUNT( * ) ) 而言,決定它們各自的結(jié)果的因素有幾個(gè):

                • 一組事務(wù)執(zhí)行前的數(shù)據(jù)狀態(tài)(初始數(shù)據(jù)狀態(tài))。
                • 有時(shí)間重疊的事務(wù)們的執(zhí)行序列 (操作時(shí)序,事務(wù)理論表明 并發(fā)事務(wù)操作的可串行化是正確性的必要條件)。
                • 事務(wù)們各自的隔離級(jí)別(每個(gè)操作的輸入)。

                其中 1、2 對(duì)于 Server 而言都是全局或者說(shuō)可控的,只有 3 是每個(gè)用戶(hù)線(xiàn)程中事務(wù)所獨(dú)有的屬性,這是 Server 端不可控的因素,因此 Server 端也就對(duì)每個(gè) COUNT( * ) 結(jié)果不可控了。

                Q:InnoDB-COUNT( * ) 屬 table scan 操作,是否會(huì)將現(xiàn)有 Buffer Pool 中其它用戶(hù)線(xiàn)程所需熱點(diǎn)頁(yè)從 LRU-list 中擠占掉,從而其它用戶(hù)線(xiàn)程還需從磁盤(pán) load一次,突然加重 IO 消耗,可能對(duì)現(xiàn)有請(qǐng)求造成阻塞?

                A:MySQL 有這樣的優(yōu)化策略,將掃表操作所 load的 page 放在 LRU-list 的 oung/old 的交界處 ( LRU 尾部約 3/8 處 )。這樣用戶(hù)線(xiàn)程所需的熱點(diǎn)頁(yè)仍然在 LRU-list-young 區(qū)域,而掃表操作不斷 load 的頁(yè)則會(huì)不斷沖刷old區(qū)域的頁(yè),這部分的頁(yè)本身就是被認(rèn)為非熱點(diǎn)的頁(yè),因此也相對(duì)符合邏輯。

                PS: 個(gè)人認(rèn)為還有一種類(lèi)似的優(yōu)化思路,是限定掃描操作所使用的 Buffer Pool 的大小為 O(1) 級(jí)別,但這樣做需要付出額外的內(nèi)存管理成本。

                Q:InnoDB-COUNT( * ) 是否會(huì)像 SELECT * FROM t 那樣讀取存儲(chǔ)大字段的溢出頁(yè)(如果存在)?

                A:否。因?yàn)?InnoDB-COUNT( * ) 只需要數(shù)行數(shù),而每一行的主鍵肯定不是 NULL,因此只需要讀主鍵索引頁(yè)內(nèi)的行數(shù)據(jù),而無(wú)需讀取額外的溢出頁(yè)。

                blog.didiyun.com/index.php/2019/01/08/mysql-count/

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶(hù)投稿
                上一篇 2022年7月6日 07:45
                下一篇 2022年7月6日 07:45

                相關(guān)推薦

                • ios手游模擬器(手游模擬器ios)

                  本文主要講的是ios手游模擬器,以及和手游模擬器ios相關(guān)的知識(shí),如果覺(jué)得本文對(duì)您有所幫助,不要忘了將本文分享給朋友。 哪個(gè)iOS模擬器能多開(kāi)手游賬號(hào)?可以推薦個(gè)好用的模擬器給我嗎…

                  2022年11月27日
                • 短視頻策劃內(nèi)容的3個(gè)要點(diǎn)(短視頻策劃內(nèi)容怎么做)

                  短視頻在制作時(shí),內(nèi)容框架非常重要。如果直奔主題,然后結(jié)束,聚卓告訴你,這樣的短視頻已經(jīng)過(guò)時(shí)了?,F(xiàn)在的短視頻需要框架的,但不是任何框架,它需要一種易于理解和消化的框架。而且,現(xiàn)在大多…

                  2022年11月27日
                • 美團(tuán)第三季度實(shí)現(xiàn)營(yíng)收626億元,即時(shí)配送訂單量增至50億筆

                  新京報(bào)訊(記者秦勝南)11月25日,美團(tuán)發(fā)布業(yè)績(jī)公告顯示,第三季度營(yíng)收為626億元,較去年同比增長(zhǎng)28.2%,凈利潤(rùn)為12.2億元。第三季度,美團(tuán)即時(shí)配送訂單數(shù)增長(zhǎng)至50億筆。截至…

                  2022年11月27日
                • 存儲(chǔ)過(guò)程語(yǔ)法(sql server存儲(chǔ)過(guò)程語(yǔ)法)

                  今天小編給各位分享存儲(chǔ)過(guò)程語(yǔ)法的知識(shí),其中也會(huì)對(duì)sql server存儲(chǔ)過(guò)程語(yǔ)法進(jìn)行解釋?zhuān)绻芘銮山鉀Q你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧! oracle存儲(chǔ)過(guò)程基本語(yǔ)法…

                  2022年11月26日
                • 個(gè)人怎么做抖音帶貨(個(gè)人做抖音帶貨能賺錢(qián)嗎)

                  抖音如今是大家很熟悉的短視頻平臺(tái),不過(guò)現(xiàn)在的抖音卻不只是短視頻那么簡(jiǎn)單,它的功能非常豐富,其中一個(gè)就是可以帶貨,相信很多小伙伴都有在抖音上買(mǎi)過(guò)東西,抖音如今的變現(xiàn)能力也是不容小覷的…

                  2022年11月25日
                • 客服的崗位職責(zé)怎么寫(xiě)(客服工作內(nèi)容及職責(zé))

                  各位小伙伴們大家周一好,又到了每周一給大家分享干貨內(nèi)容的時(shí)候啦~ 本期來(lái)跟大家分享一下客服工作管理流程以及客服崗位里面的每項(xiàng)職能崗位的核心細(xì)則,也是干貨滿(mǎn)滿(mǎn)推薦收藏~ 一.補(bǔ)償流程…

                  2022年11月25日
                • 小紅書(shū)平臺(tái)的一些機(jī)制及玩法詳解(小紅書(shū)玩法有哪些)

                  關(guān)于小紅書(shū) 一:小紅書(shū)平臺(tái)的一些機(jī)制 1. 筆記內(nèi)容的CES評(píng)分機(jī)制 2. 筆記流量入口與長(zhǎng)尾效應(yīng) 二:小紅書(shū)優(yōu)質(zhì)筆記的特點(diǎn)(分維度、類(lèi)型分析) 1.筆記的本身架構(gòu)組成 維度 2.…

                  2022年11月25日
                • 百度關(guān)鍵詞快速排名的4大原理解析(百度怎么刷關(guān)鍵詞)

                  近期百度公告驚雷算法2.0,升級(jí)之快還是第一次吧,看來(lái)百度對(duì)于刷點(diǎn)擊行為是零容忍了。之前尹華峰SEO技術(shù)博客介紹過(guò)一篇如何使用刷點(diǎn)擊工具,其實(shí)市面上有很多這類(lèi)SEO快速排名的軟件,…

                  2022年11月25日
                • 淘寶直播開(kāi)通后帶貨鏈接怎么做(淘寶直播需要開(kāi)通淘寶店鋪嗎)

                  直播帶貨無(wú)論是對(duì)于商家來(lái)說(shuō)還是主播收益都是非??捎^的,所以不少平臺(tái)都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開(kāi)通后帶貨鏈接怎么做?下面小編為大家?guī)?lái)淘寶直播開(kāi)通后帶…

                  2022年11月24日
                • cpu性能天梯圖2022 AMD CPU天梯圖最新排行榜出爐

                  用戶(hù)在DIY自己的主機(jī)時(shí)選擇CPU是非常關(guān)鍵的,CPU可以說(shuō)是電腦的大腦,大家也都想追求好一點(diǎn)的CPU來(lái)使用,但型號(hào)太多了,大部分的用戶(hù)都不知道目前哪一款CPU比較好用,快來(lái)看看詳…

                  2022年11月24日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息