在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ClickHouse內(nèi)幕(3)基于索引的查詢優(yōu)化

京東云 ? 來(lái)源:jf_75140285 ? 作者:jf_75140285 ? 2024-06-11 10:46 ? 次閱讀

ClickHouse索引采用唯一聚簇索引的方式,即Part內(nèi)數(shù)據(jù)按照order by keys有序,在整個(gè)查詢計(jì)劃中,如果算子能夠有效利用輸入數(shù)據(jù)的有序性,對(duì)算子的執(zhí)行性能將有巨大的提升。本文討論ClickHouse基于索引的查詢算子優(yōu)化方式。

在整個(gè)查詢計(jì)劃中Sort、Distinct、聚合這3個(gè)算子相比其他算子比如:過(guò)濾、projection等有如下幾個(gè)特點(diǎn):1.算子需要再內(nèi)存中保存狀態(tài),內(nèi)存代價(jià)高;2.算子計(jì)算代價(jià)高;3.算子會(huì)阻斷執(zhí)行pipeline,待所有數(shù)據(jù)計(jì)算完整后才會(huì)向下游輸出數(shù)據(jù)。所以上算子往往是整個(gè)查詢的瓶頸算子。

本文詳細(xì)討論,3個(gè)算子基于索引的查詢優(yōu)化前后,在計(jì)算、內(nèi)存和pipeline阻斷上的影響。

實(shí)驗(yàn)前準(zhǔn)備:

后續(xù)的討論主要基于實(shí)驗(yàn)進(jìn)行。

CREATE TABLE test_in_order
(
    `a` UInt64,
    `b` UInt64,
    `c` UInt64,
    `d` UInt64
)
ENGINE = MergeTree
ORDER BY (a, b);

表中總共有3個(gè)part,每個(gè)part數(shù)據(jù)量4條。

PS: 用戶可以在插入數(shù)據(jù)前提前關(guān)閉后臺(tái)merge,以避免part合并成一個(gè),如果part合并成一個(gè)將影響查詢并行度,可能對(duì)實(shí)驗(yàn)有影響,以下查詢可以關(guān)閉后臺(tái)merge:system stop merges test_in_order

一、Sort算子

如果order by查詢的order by字段與表的order by keys的前綴列匹配,那么可以根據(jù)數(shù)據(jù)的有序特性對(duì)Sort算子進(jìn)行優(yōu)化。

1.Sort算子實(shí)現(xiàn)方式

首先看下不能利用主鍵有序性的場(chǎng)景,即對(duì)于order by查詢的order by字段與表的order by keys的前綴列不匹配。比如下面的查詢:

query_1: EXPLAIN PIPELINE SELECT b FROM read_in_order ORDER BY b ASC

它的執(zhí)行計(jì)劃如下:

┌─explain───────────────────────────────┐
│ (Expression)                          │
│ ExpressionTransform                   │
│   (Sorting)                           │
│   MergingSortedTransform 3 → 1        │
│     MergeSortingTransform × 3         │
│       LimitsCheckingTransform × 3     │
│         PartialSortingTransform × 3   │
│           (Expression)                │
│           ExpressionTransform × 3     │
│             (ReadFromMergeTree)       │
│             MergeTreeThread × 3 0 → 1 │
└───────────────────────────────────────┘

排序算法由3個(gè)Transform組成,其中

1)PartialSortingTransform對(duì)單個(gè)Chunk進(jìn)行排序;

2)MergeSortingTransform對(duì)單個(gè)stream進(jìn)行排序;

3)MergingSortedTransform合并多個(gè)有序的stream進(jìn)行全局sort-merge排序

wKgaomZnupqAPI15AAB2MeV7qvk592.png


如果查詢的order by字段與表的order by keys的前綴列匹配,那么可以根據(jù)數(shù)據(jù)的有序特性對(duì)查詢進(jìn)行優(yōu)化,優(yōu)化開(kāi)關(guān):optimize_read_in_order。

2.匹配索引列的查詢

以下查詢的order by字段與表的order by keys的前綴列匹配

query_3: EXPLAIN PIPELINE SELECT b FROM test_in_order ORDER BY a ASC, b ASCSETTINGS optimize_read_in_order = 0 -- 關(guān)閉read_in_order優(yōu)化

查看order by語(yǔ)句的pipeline執(zhí)行計(jì)劃

┌─explain───────────────────────────┐
│ (Expression)                      │
│ ExpressionTransform               │
│   (Sorting)                       │
│   MergingSortedTransform 3 → 1    │
│     MergeSortingTransform × 3     │
│       (Expression)                │
│       ExpressionTransform × 3     │
│         (ReadFromMergeTree)       │
│         MergeTreeThread × 3 0 → 1 │
└───────────────────────────────────┘

此時(shí)order by算子的算法

1)首先MergeSortingTransform對(duì)輸入的stream進(jìn)行排序

2)然后MergingSortedTransform將多個(gè)排好序的stream進(jìn)行合并,并輸出一個(gè)整體有序的stream,也是最終的排序結(jié)果。

這里有個(gè)疑問(wèn)在關(guān)閉read_in_order優(yōu)化的查詢計(jì)劃中,系統(tǒng)直接默認(rèn)了MergeSortingTransform的輸入在Chunk內(nèi)是有序的,這里其實(shí)是一個(gè)默認(rèn)優(yōu)化,因?yàn)閛rder by查詢的order by字段與表的order by keys的前綴列匹配,所以數(shù)據(jù)在Chunk內(nèi)部一定是有序的。

3. 開(kāi)啟優(yōu)化optimize_read_in_order

┌─explain──────────────────────────┐
│ (Expression)                     │
│ ExpressionTransform              │
│   (Sorting)                      │
│   MergingSortedTransform 3 → 1   │
│     (Expression)                 │
│     ExpressionTransform × 3      │
│       (ReadFromMergeTree)        │
│       MergeTreeInOrder × 3 0 → 1 │
└──────────────────────────────────┘

4. 優(yōu)化分析

打開(kāi)optimize_read_in_order后:

1.對(duì)于計(jì)算方面:算法中只有一個(gè)MergingSortedTransform,省略了單個(gè)stream內(nèi)排序的步驟

2.由于內(nèi)存方面:由于MergeSortingTransform是消耗內(nèi)存最大的步驟,所以優(yōu)化后可以節(jié)約大量的內(nèi)存

3.對(duì)于poipeline阻塞:MergeSortingTransform會(huì)阻塞整個(gè)pipeline,所以優(yōu)化后也消除了對(duì)pipeline的阻塞

二、Distinct算子

如果distinct查詢的distinct字段與表的order by keys的前綴列匹配,那么可以根據(jù)數(shù)據(jù)的有序特性對(duì)Distinct算子進(jìn)行優(yōu)化,優(yōu)化開(kāi)關(guān):optimize_distinct_in_order。通過(guò)以下實(shí)驗(yàn)進(jìn)行說(shuō)明:

1. Distinct算子實(shí)現(xiàn)方式

查看distinct語(yǔ)句的pipeline執(zhí)行計(jì)劃

query_2: EXPLAIN PIPELINE SELECT DISTINCT * FROM woo.test_in_order SETTINGS optimize_distinct_in_order = 0 -- 關(guān)閉distinct in order優(yōu)化
┌─explain─────────────────────────────┐
│ (Expression)                        │
│ ExpressionTransform                 │
│   (Distinct)                        │
│   DistinctTransform                 │
│     Resize 3 → 1                    │
│       (Distinct)                    │
│       DistinctTransform × 3         │
│         (Expression)                │
│         ExpressionTransform × 3     │
│           (ReadFromMergeTree)       │
│           MergeTreeThread × 3 0 → 1 │
└─────────────────────────────────────┘

Distinct算子采用兩階段的方式,首先第一個(gè)DistinctTransform在內(nèi)部進(jìn)行初步distinct,其并行度為3,可以簡(jiǎn)單的認(rèn)為有3個(gè)線程在同時(shí)執(zhí)行。然后第二個(gè)DistinctTransform進(jìn)行final distinct。

每個(gè)DistinctTransform的計(jì)算方式為:首先構(gòu)建一個(gè)HashSet數(shù)據(jù)結(jié)構(gòu),然后根據(jù)HashSet,構(gòu)建一個(gè)Filter Mask(如果當(dāng)前key存在于HashSet中,則過(guò)濾掉),最后過(guò)濾掉不需要的數(shù)據(jù)。

2.開(kāi)啟優(yōu)化optimize_distinct_in_order

┌─explain────────────────────────────────┐
│ (Expression)                           │
│ ExpressionTransform                    │
│   (Distinct)                           │
│   DistinctTransform                    │
│     Resize 3 → 1                       │
│       (Distinct)                       │
│       DistinctSortedChunkTransform × 3 │
│         (Expression)                   │
│         ExpressionTransform × 3        │
│           (ReadFromMergeTree)          │
│           MergeTreeThread × 3 0 → 1    │
└────────────────────────────────────────┘

可以看到初步distinct和final distinct采用了不同的transform,DistinctSortedChunkTransform和DistinctTransform。

DistinctSortedChunkTransform:對(duì)單個(gè)stream內(nèi)的數(shù)據(jù)進(jìn)行distinct操作,因?yàn)閐istinct列跟表的order by keys的前綴列匹配,scan算子讀取數(shù)據(jù)的時(shí)候一個(gè)stream只從一個(gè)part內(nèi)讀取數(shù)據(jù),那么每個(gè)distinct transform輸入的數(shù)據(jù)就是有序的。所以distinct算法有:

DistinctSortedChunkTransform算法一:

Transform中保留最后一個(gè)輸入的數(shù)據(jù)作為狀態(tài),對(duì)于每個(gè)輸入的新數(shù)據(jù)如果跟保留的狀態(tài)相同,那么忽略,如果不同則將上一個(gè)狀態(tài)輸出給上一個(gè)算子,然后保留當(dāng)前的數(shù)據(jù)最為狀態(tài)。這種算法對(duì)于在整個(gè)stream內(nèi)部全局去重時(shí)間和空間復(fù)雜度都有極大的降低。

wKgaomZnup2AV9P5AAAkb6cOov0046.png


DistinctSortedStreamTransform算法二:(ClickHouse采用的)

Transform對(duì)與每個(gè)Chunk(ClickHouse中Transform數(shù)據(jù)處理的基本單位,默認(rèn)大約6.5w行),首先將相同的數(shù)據(jù)劃分成多個(gè)Range,并設(shè)置一個(gè)mask數(shù)組,然后將相同的數(shù)據(jù)刪除掉,最后返回刪除重復(fù)數(shù)據(jù)的Chunk。

wKgZomZnup2AVsteAAA1RbKTsnk642.png


3. 優(yōu)化分析

打開(kāi)optimize_distinct_in_order后:主要對(duì)于第一階段的distinct步驟進(jìn)行了優(yōu)化,從基于HashSet過(guò)濾的算法到基于連續(xù)相同值的算法。

1.對(duì)于計(jì)算方面:優(yōu)化后的算法,省去了Hash計(jì)算,但多了判斷相等的步驟,在不同數(shù)據(jù)基數(shù)集大小下,各有優(yōu)劣。

2.由于內(nèi)存方面:優(yōu)化后的算法,不需要存儲(chǔ)HashSet

3.對(duì)于poipeline阻塞:優(yōu)化前后都不會(huì)阻塞pipeline

三、聚合算子

如果group by查詢的order by字段與表的order by keys的前綴列匹配,那么可以根據(jù)數(shù)據(jù)的有序特性對(duì)聚合算子進(jìn)行優(yōu)化,優(yōu)化開(kāi)關(guān):optimize_aggregation_in_order。

1.聚合算子實(shí)現(xiàn)方式

查看group by語(yǔ)句的pipeline執(zhí)行計(jì)劃:

query_4: EXPLAIN PIPELINE SELECT a FROM test_in_order GROUP BY a SETTINGS optimize_aggregation_in_order = 0 -- 關(guān)閉read_in_order優(yōu)化
┌─explain─────────────────────────────┐
│ (Expression)                        │
│ ExpressionTransform × 8             │
│   (Aggregating)                     │
│   Resize 3 → 8                      │
│     AggregatingTransform × 3        │
│       StrictResize 3 → 3            │
│         (Expression)                │
│         ExpressionTransform × 3     │
│           (ReadFromMergeTree)       │
│           MergeTreeThread × 3 0 → 1 │
└─────────────────────────────────────┘

對(duì)于聚合算子的整體算法沒(méi)有在執(zhí)行計(jì)劃中完整顯示出來(lái),其宏觀上采用兩階段的聚合算法,其完整算法如下:1.AggregatingTransform進(jìn)行初步聚合,這一步可以并行計(jì)算;2.ConvertingAggregatedToChunksTransform進(jìn)行第二階段聚合。(PS:為簡(jiǎn)化起見(jiàn),忽略two level HashMap,和spill to disk的介紹)。

2.開(kāi)啟優(yōu)化optimize_aggregation_in_order

執(zhí)行計(jì)劃如下:

┌─explain───────────────────────────────────────┐
│ (Expression)                                  │
│ ExpressionTransform × 8                       │
│   (Aggregating)                               │
│   MergingAggregatedBucketTransform × 8        │
│     Resize 1 → 8                              │
│       FinishAggregatingInOrderTransform 3 → 1 │
│         AggregatingInOrderTransform × 3       │
│           (Expression)                        │
│           ExpressionTransform × 3             │
│             (ReadFromMergeTree)               │
│             MergeTreeInOrder × 3 0 → 1        │
└───────────────────────────────────────────────┘

可以看到打開(kāi)optimize_aggregation_in_order后aggregating算法由三個(gè)步驟組成:

1)首先AggregatingInOrderTransform會(huì)將stream內(nèi)連續(xù)的相同的key進(jìn)行預(yù)聚合,預(yù)聚合后在當(dāng)前stream內(nèi)相同keys的數(shù)據(jù)只會(huì)有一條;

2)FinishAggregatingInOrderTransform將接收到的多個(gè)stream內(nèi)的數(shù)據(jù)進(jìn)行重新分組使得輸出的chunk間數(shù)據(jù)是有序的,假設(shè)前一個(gè)chunk中g(shù)roup by keys最大的一條數(shù)據(jù)是5,當(dāng)前即將輸出的chunk中沒(méi)有大于5的數(shù)據(jù);

3)MergingAggregatedBucketTransform的作用是進(jìn)行最終的merge aggregating。

wKgaomZnup2ARICmAABfrfxtQaI394.png


FinishAggregatingInOrderTransform的分組算法如下:

假設(shè)有3個(gè)stream當(dāng)前算子會(huì)維護(hù)3個(gè)Chunk,每一次選取在當(dāng)前的3個(gè)Chunk內(nèi)找到最后一條數(shù)據(jù)的最小值,比如初始狀態(tài)最小值是5,然后將3個(gè)Chunk內(nèi)所有小于5的數(shù)據(jù)一次性取走,如此反復(fù)如果一個(gè)Chunk被取光,需要從改stream內(nèi)拉取新的Chunk。

wKgZomZnup6AEeZ2AABVTVDACO0969.png


這種算法保證了每次FinishAggregatingInOrderTransform向下游輸出的Chunk的最大值小于下一次Chunk的最小值,便于后續(xù)步驟的優(yōu)化。

3.優(yōu)化分析

打開(kāi)optimize_aggregation_in_order后:主要對(duì)于第一階段的聚合步驟進(jìn)行了優(yōu)化,從基于HashMap的算法到基于連續(xù)相同值的算法。

1.對(duì)于計(jì)算方面:優(yōu)化后的算法,減少了Hash計(jì)算,但多了判斷相等的步驟,在不同數(shù)據(jù)基數(shù)集大小下,各有優(yōu)劣。

2.由于內(nèi)存方面:優(yōu)化前后無(wú)差別

3.對(duì)于poipeline阻塞:優(yōu)化前后無(wú)差別

四、優(yōu)化小結(jié)

在整個(gè)查詢計(jì)劃中Sort、Distinct、聚合這3個(gè)算子算子往往是整個(gè)查詢的瓶頸算子,所以值得對(duì)其進(jìn)行深度優(yōu)化。ClickHouse通過(guò)利用算子輸入數(shù)據(jù)的有序性,優(yōu)化算子的算法或者選擇不同的算法,在計(jì)算、內(nèi)存和pipeline阻塞三個(gè)方面均有不同程度的優(yōu)化。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Pipeline
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    9633
  • 算子
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    7339
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙5開(kāi)發(fā)寶藏案例分享---優(yōu)化應(yīng)用時(shí)延問(wèn)題

    ;gt; this.data = result) } 效果 : 4000條數(shù)據(jù)從 780ms → 172ms ! 注意 :小于1000條數(shù)據(jù)時(shí)差異不大,大數(shù)據(jù)量必用 ?** 案例3:數(shù)據(jù)庫(kù)查詢優(yōu)化
    發(fā)表于 06-13 10:08

    ClickHouse 的“獨(dú)孤九劍”:極速查詢的終極秘籍

    引言 在大數(shù)據(jù)時(shí)代的江湖,數(shù)據(jù)量呈爆炸式增長(zhǎng),如何高效地處理和分析海量數(shù)據(jù)成為了一個(gè)關(guān)鍵問(wèn)題。各路英雄豪杰紛紛亮出自己的絕技,爭(zhēng)奪數(shù)據(jù)處理的巔峰寶座。而在這場(chǎng)激烈的角逐中,ClickHouse 以其
    的頭像 發(fā)表于 04-07 13:34 ?202次閱讀
    <b class='flag-5'>ClickHouse</b> 的“獨(dú)孤九劍”:極速<b class='flag-5'>查詢</b>的終極秘籍

    《AI Agent 應(yīng)用與項(xiàng)目實(shí)戰(zhàn)》閱讀心得3——RAG架構(gòu)與部署本地知識(shí)庫(kù)

    的片段,再利用預(yù)訓(xùn)練模型進(jìn)行向量化,建立高效的檢索索引。在檢索階段,系統(tǒng)計(jì)算查詢與文檔片段的向量相似度,篩選出最相關(guān)的內(nèi)容。這些內(nèi)容會(huì)通過(guò)注入提示的方式提供給LLM,指導(dǎo)其生成準(zhǔn)確且符合上下文的回答
    發(fā)表于 03-07 19:49

    【「基于大模型的RAG應(yīng)用開(kāi)發(fā)與優(yōu)化」閱讀體驗(yàn)】RAG基本概念

    了跨模態(tài)對(duì)齊損失函數(shù),通過(guò)優(yōu)化該函數(shù),使得查詢語(yǔ)句與文檔之間的語(yǔ)義匹配精度得到顯著提升,從而提高檢索結(jié)果的相關(guān)性。增量索引更新技術(shù)基于LSM-Tree(Log-Structured Merge-Tree
    發(fā)表于 02-08 00:22

    【「基于大模型的RAG應(yīng)用開(kāi)發(fā)與優(yōu)化」閱讀體驗(yàn)】+第一章初體驗(yàn)

    合理且正確。 三、RAG應(yīng)用的技術(shù)框架 本章進(jìn)一步探討了大模型與RAG結(jié)合的深層價(jià)值,提出兩者的協(xié)同效應(yīng)體現(xiàn)在以下方面: 1數(shù)據(jù)索引階段包含:加載、分割、嵌入、索引 2數(shù)據(jù)查詢階段包含:檢索、生成
    發(fā)表于 02-07 10:42

    創(chuàng)建唯一索引的SQL命令和技巧

    在創(chuàng)建唯一索引時(shí),以下是一些SQL命令和技巧,可以幫助優(yōu)化性能: 使用合適的索引類型:對(duì)于需要保證唯一性的列,使用UNIQUE索引來(lái)避免重復(fù)數(shù)據(jù)的插入。 這可以確保列中的值是唯一的,同
    的頭像 發(fā)表于 01-09 15:21 ?398次閱讀

    javascript:void(0) 是否影響SEO優(yōu)化

    使用 javascript:void(0) 確實(shí)可能對(duì)SEO優(yōu)化產(chǎn)生負(fù)面影響 。以下是關(guān)于 javascript:void(0) 對(duì)SEO影響的具體分析: 搜索引擎爬蟲(chóng)的理解問(wèn)題 搜索引擎爬蟲(chóng)(如
    的頭像 發(fā)表于 12-31 16:08 ?504次閱讀

    HTTP 協(xié)議對(duì)于SEO優(yōu)化的影響

    索引優(yōu)化(SEO)是提高網(wǎng)站在搜索引擎中的可見(jiàn)性和排名的過(guò)程。HTTP協(xié)議作為互聯(lián)網(wǎng)通信的基礎(chǔ),對(duì)SEO有著深遠(yuǎn)的影響。 1. HTTP狀態(tài)碼 HTTP狀態(tài)碼是服務(wù)器響應(yīng)客戶端請(qǐng)求的結(jié)果。這些
    的頭像 發(fā)表于 12-30 09:29 ?543次閱讀

    SSM框架的性能優(yōu)化技巧 SSM框架中RESTful API的實(shí)現(xiàn)

    緩存操作。 優(yōu)化SQL查詢 : SQL查詢是數(shù)據(jù)庫(kù)操作中的瓶頸之一。 使用索引來(lái)加速查詢,避免全表掃描,盡量使用
    的頭像 發(fā)表于 12-17 09:10 ?718次閱讀

    ClickHouse:強(qiáng)大的數(shù)據(jù)分析引擎

    作者:京東物流 陳昌浩 最近的工作中接觸到CK,一開(kāi)始還不知道CK是什么,通過(guò)查詢才知道CK是ClickHouseClickHouse 是俄羅斯的Yandex于2016年開(kāi)源的列式存儲(chǔ)數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 12-10 10:23 ?472次閱讀
    <b class='flag-5'>ClickHouse</b>:強(qiáng)大的數(shù)據(jù)分析引擎

    Taro鴻蒙技術(shù)內(nèi)幕系列(一):如何將React代碼跑在ArkUI上

    基于 Taro 打造的京東鴻蒙 APP 已跟隨鴻蒙 Next 系統(tǒng)公測(cè),本系列文章將深入解析 Taro 如何實(shí)現(xiàn)使用 React 開(kāi)發(fā)高性能鴻蒙應(yīng)用的技術(shù)內(nèi)幕。
    的頭像 發(fā)表于 10-25 17:24 ?675次閱讀
    Taro鴻蒙技術(shù)<b class='flag-5'>內(nèi)幕</b>系列(一):如何將React代碼跑在ArkUI上

    內(nèi)幕揭秘:電流檢測(cè)放大器的滿量程和動(dòng)態(tài)范圍注意事項(xiàng)

    電子發(fā)燒友網(wǎng)站提供《內(nèi)幕揭秘:電流檢測(cè)放大器的滿量程和動(dòng)態(tài)范圍注意事項(xiàng).pdf》資料免費(fèi)下載
    發(fā)表于 09-12 09:11 ?0次下載
    <b class='flag-5'>內(nèi)幕</b>揭秘:電流檢測(cè)放大器的滿量程和動(dòng)態(tài)范圍注意事項(xiàng)

    MATLAB中的矩陣索引

    對(duì)矩陣進(jìn)行索引是從矩陣中選擇或修改部分元素的一種方式。MATLAB 有幾種索引樣式,它們不僅功能強(qiáng)大、靈活,而且可讀性強(qiáng)、表現(xiàn)力強(qiáng)。矩陣是 MATLAB 用來(lái)組織和分析數(shù)據(jù)的一個(gè)核心組件,索引是以可理解的方式有效操作矩陣的關(guān)鍵。
    的頭像 發(fā)表于 09-05 09:28 ?994次閱讀
    MATLAB中的矩陣<b class='flag-5'>索引</b>

    一文了解MySQL索引機(jī)制

    接觸MySQL數(shù)據(jù)庫(kù)的小伙伴一定避不開(kāi)索引,索引的出現(xiàn)是為了提高數(shù)據(jù)查詢的效率,就像書(shū)的目錄一樣。 某一個(gè)SQL查詢比較慢,你第一時(shí)間想到的就是“給某個(gè)字段加個(gè)
    的頭像 發(fā)表于 07-25 14:05 ?529次閱讀
    一文了解MySQL<b class='flag-5'>索引</b>機(jī)制

    供應(yīng)鏈場(chǎng)景使用ClickHouse最佳實(shí)踐

    關(guān)于ClickHouse的基礎(chǔ)概念這里就不做太多的贅述了,ClickHouse官網(wǎng)都有很詳細(xì)說(shuō)明。結(jié)合供應(yīng)鏈數(shù)字化團(tuán)隊(duì)在使用ClickHouse時(shí)總結(jié)出的一些注意事項(xiàng),尤其在命名方面要求研發(fā)嚴(yán)格遵守
    的頭像 發(fā)表于 07-18 15:05 ?494次閱讀
    供應(yīng)鏈場(chǎng)景使用<b class='flag-5'>ClickHouse</b>最佳實(shí)踐
    主站蜘蛛池模板: 日韩欧美在线中文字幕 | 国产精品国产三级在线高清观看 | h视频在线观看网站 | 日本一区二区三区欧美在线观看 | 六月婷婷七月丁香 | 天天免费| 国产精品自线在线播放 | 男女爱爱是免费看 | 欧美在线视 | 草久视频在线观看 | 四虎最新紧急入口4hu | 久久人人青草97香蕉 | 色播五月婷婷 | 日本一区二区高清免费不卡 | 欧美18性欧美丶黑吊 | 99精品热女视频专线 | 一区精品视频 | 深夜一级毛片 | 视频在线观看高清免费大全 | 欧美人成网 | 乡村乱人伦短小说 | h网站在线 | 免费一级特黄特色大片在线 | 午夜视频免费观看黄 | 国产高清视频免费最新在线 | 亚洲国产精品久久婷婷 | 国产伦精品一区二区免费 | 日日噜噜噜夜夜爽爽狠狠 | 日本xxx69hd| 唐人社电亚洲一区二区三区 | 2019天天操| 视频一二三区 | 很色视频 | 香蕉午夜视频 | 六月婷婷七月丁香 | 毛片毛 | 国产香蕉精品视频在 | 97干干| 人人搞人人爱 | 57pao成人永久免费视频 | xxxx欧美69免费 |