文章目錄
ClickHouse 使用 MySql Database Engine
之前筆記 ClickHouse 在彙總資料時的效能優勢 紀錄到 ClickHouse 與 MySql 在特定查詢情境的效能差異,查閱官網文件時,發現 ClickHouse 除了支援自有的 table engine 之外,也支援其他 DB 的 engine 其中還有兩種類型:Database Engine 與 Table Engine,所以今天就來紀錄一下 ClickHouse 如何使用 MySql Database Engine 與 MySql Table Engine 之間的效能差異
基本環境說明
- macOS Sonoma 14.2.1 (Apple M2 Pro)
- OrbStack Version 1.2.0 (16496)
- .NET SDK 8.0.100
- JetBrains Rider 2023.3.2
- Container Images - clickhouse/clickhouse-server:23.11.3.23
- mysql:8.2
 
- NuGet Library - BenchmarkDotNet 0.13.12
- ClickHouse.Client 7.0.0
- MySql.Data 8.3.0
 
- docker-compose.yml 
- MySql DDL 
- 測試資料 - 產生一億筆資料 
設定方式
- Database Engine - 詳細內容請參考官網文件 DatabaseEngines:MySQL - 語法 
- 範例 
 
- Table Engine - 詳細內容請參考官網文件 TableEngin:MySQL - 語法 
- 範例 
 
效能比較
- 程式碼 
- 比較結果 
心得
- 僅支援以下 data type,其他 MySQL data type 皆會被視為 string,使用時需要自行做型別轉換,難免會有效能耗損的問題 - MySQL - ClickHouse - UNSIGNED TINYINT - UInt8 - TINYINT - Int8 - UNSIGNED SMALLINT - UInt16 - SMALLINT - Int16 - UNSIGNED INT, UNSIGNED MEDIUMINT - UInt32 - INT, MEDIUMINT - Int32 - UNSIGNED BIGINT - UInt64 - BIGINT - Int64 - FLOAT - Float32 - DOUBLE - Float64 - DATE - Date - DATETIME, TIMESTAMP - DateTime - BINARY - FixedString 
- 原本想要比照之前筆記 :依時間區間過濾資料,但我嘗試了 - BETWEEN與- >=跟- <=,都無法正確查到資料,不知道是我使用方式不對,還是 mysql engine 對於 date 的比對有額外的處理方式,所以就先不將這個部分納入比較
- 雖然簡單的 - WHERE相關條件 (- =,- !=,- >,- >=,- <,- <=) 是在 MySQL 上執行,但相同查詢在 ClickHouse 相較於 MySQL 快上近 50%,雖然比不上直接查詢 ClickHouse 動輒幾十甚至上百倍的差距,但也不失為一個選擇
- ClickHouse MySql engine (database engine 與 table engine) 都支援 - SELECT與- INSERT指令,但- RENAME、- CREATE TABLE、- ALTER則不行
完整程式碼請參考:GitHub:yowko/ClickHouseMySqlEngineBenchmark
參考資訊
文章作者 Yowko Tsai
上次更新 2024-01-15
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
 Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。
