T-SQL 與 KQL 的真正差異
用最清楚、最快理解的方式告訴你 T-SQL 與 KQL 的真正差異。
🧠 一句話總結
T-SQL 是用來查「資料庫」的語言 KQL 是用來查「大量事件 / Log / 時序資料」的語言
兩者完全不同用途!
🔥 用途差異(最重要)
| 項目 | T-SQL | KQL |
|---|---|---|
| 用途 | 結構化資料庫查詢、分析 | 海量 log / event / telemetry |
| 使用場景 | SQL Server、Synapse、Fabric Warehouse | Log Analytics、Application Insights、Fabric Real-Time Hub、Eventhouse |
| 設計目的 | OLTP / OLAP | 高速搜尋、過濾、統計、大量資料探索 |
🧱 能不能「改資料」?
| T-SQL | KQL | |
|---|---|---|
| INSERT / UPDATE / DELETE | ✔ 支援 | ❌ 完全不支援 |
| CREATE / ALTER TABLE | ✔ 支援 | ❌ 不支援 |
| 查詢語法 | ✔ | ✔ (但語法不同) |
👉 KQL 是 read-only 只能查、不能改。
⚡ 性能哲學差異
T-SQL 的設計理念:
- 強調嚴謹、交易一致性、資料寫入安全
- 適合傳統表格資料
- join、index、transaction 很重要
KQL 的設計理念:
- 極致查詢速度(超快!)
- 針對數億到數十億筆資料設計
- 流水式(pipeline-based)處理資料
- 先過濾(filter early)、再統計
🧩 語法差異(看例子最清楚)
🔷 T-SQL
SELECT Author, SUM(Price * Units) AS TotalSales
FROM AuthorSales
WHERE SalesDate >= '2024-01-01'
GROUP BY Author
ORDER BY TotalSales DESC;
🔶 KQL(完全不同風格)
AuthorSales
| where SalesDate >= datetime(2024-01-01)
| summarize TotalSales = sum(Price * Units) by Author
| order by TotalSales desc
差別:
- KQL 使用 管線符號
|,像 Linux command - 沒有 SELECT、FROM、GROUP BY
- 很像 Spark + SQL 的混合體
🛰 查詢速度差異
| T-SQL | KQL | |
|---|---|---|
| 優化方式 | index、join、execution plan | filter early、columnar scan、分散式運算 |
| 面對 5億筆資料 | 可能要幾秒~幾分鐘 | 常常 0.5~2秒內 |
KQL 對大資料量有不可思議的速度優勢。
🔍 資料模型差異
T-SQL: 表格 schema(固定欄位)
資料類型固定:
intvarchardecimaldatetime- 等等
KQL: 半結構化 / 結構化 / JSON 都能查
常見 KQL 型別:
dynamic(可以存 JSON、複雜物件)reallongdatetimestring
可直接查 nested JSON:
data.events[0].location.city
📌 KQL 適合做的事
- ✅ 即時監控
- ✅ 日誌分析
- ✅ 遠端診斷
- ✅ 事件追蹤
- ✅ IoT telemetry
- ✅ log 搜尋
- ✅ dashboard(Azure Monitor / Fabric Real-Time Hub)
❌ 不適合做
傳統資料模型、寫入、ETL
📌 T-SQL 適合做的事
- ✅ 維護資料庫
- ✅ 設計 Data Warehouse
- ✅ 與 BI 報表資料模型配合
- ✅ 結構化資料查詢、join、merge
- ✅ DML + DDL
🎯 最後總結(你面試/考試可以這樣講)
T-SQL 是資料庫語言,用於讀寫結構化資料。 KQL 是查詢語言,用於 read-only 分析大量事件與 log。
兩者語法完全不同、用途完全不同、資料模型也不同。
📊 快速對照表
| 特性 | T-SQL | KQL |
|---|---|---|
| 主要用途 | 資料庫 CRUD | 大量事件查詢分析 |
| 是否可寫入 | ✔ | ❌ |
| 查詢語法 | SELECT...FROM...WHERE | table | where | summarize |
| 資料類型 | 固定 schema | 支援 dynamic/JSON |
| 最佳場景 | OLTP/OLAP | Log/Event/Telemetry |
| 性能優勢 | 結構化資料 | 海量時序資料 |