跳至主要内容

T-SQL 與 KQL 的真正差異

用最清楚、最快理解的方式告訴你 T-SQL 與 KQL 的真正差異。


🧠 一句話總結

T-SQL 是用來查「資料庫」的語言 KQL 是用來查「大量事件 / Log / 時序資料」的語言

兩者完全不同用途!


🔥 用途差異(最重要)

項目T-SQLKQL
用途結構化資料庫查詢、分析海量 log / event / telemetry
使用場景SQL Server、Synapse、Fabric WarehouseLog Analytics、Application Insights、Fabric Real-Time Hub、Eventhouse
設計目的OLTP / OLAP高速搜尋、過濾、統計、大量資料探索

🧱 能不能「改資料」?

T-SQLKQL
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-SQLKQL
優化方式index、join、execution planfilter early、columnar scan、分散式運算
面對 5億筆資料可能要幾秒~幾分鐘常常 0.5~2秒內

KQL 對大資料量有不可思議的速度優勢。


🔍 資料模型差異

T-SQL: 表格 schema(固定欄位)

資料類型固定:

  • int
  • varchar
  • decimal
  • datetime
  • 等等

KQL: 半結構化 / 結構化 / JSON 都能查

常見 KQL 型別:

  • dynamic(可以存 JSON、複雜物件)
  • real
  • long
  • datetime
  • string

可直接查 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-SQLKQL
主要用途資料庫 CRUD大量事件查詢分析
是否可寫入
查詢語法SELECT...FROM...WHEREtable | where | summarize
資料類型固定 schema支援 dynamic/JSON
最佳場景OLTP/OLAPLog/Event/Telemetry
性能優勢結構化資料海量時序資料