尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
TDengine SQL 与标准 SQL 差异 — 时序数据库的特殊性
分类10.SQL 参考 |篇章08 SQL 差异适用版本TDengine v3.xv3.3.x / v3.4.x | 最后更新2026-07-22点击了解免费详情TDengine 兼容大部分标准 SQL 但有时序特性扩展和限制。本文系统列出与 MySQL/PostgreSQL 等关系数据库的核心差异帮助迁移和误用排查。核心差异概览维度标准 SQLTDengine主键任意类型必须 ts (TIMESTAMP)表组织单层超级表/子表/普通表JOIN任意条件必须含时间条件窗口OVER 窗口INTERVAL/SESSION/STATE/EVENT/COUNT存储行式列式Schema严格支持 Schemaless索引任意列时间Tag 自动事务ACID单语句原子详细解析1. 主键与数据模型标准 SQL CREATE TABLE t ( id INT PRIMARY KEY, name VARCHAR(100) ); TDengine CREATE TABLE t ( ts TIMESTAMP, -- 必须是第一列 val FLOAT ); -- 时间列隐式为主键 超级表概念无对应 TDengine 特有 一组同构子表的模板 Tag 作为标签维度2. JOIN 限制标准 SQL SELECT * FROM t1 JOIN t2 ON t1.id t2.id; -- 任意条件 OK TDengine SELECT * FROM t1 JOIN t2 ON t1.ts t2.ts AND t1.id t2.id; -- 必须有时间相关条件 -- 替代方案 ASOF JOIN -- 时间近邻 WINDOW JOIN -- 时间窗口3. 窗口函数标准 SQLOVER 窗口 SELECT id, val, AVG(val) OVER (PARTITION BY tag ORDER BY ts ROWS BETWEEN 5 PRECEDING AND CURRENT ROW) FROM t; TDengine窗口子句 SELECT _wstart, AVG(val) FROM t PARTITION BY tag INTERVAL(1h); -- 或 MAVG 函数 SELECT ts, MAVG(val, 5) FROM t; -- 不支持 OVER ... ROWS BETWEEN4. DELETE/UPDATE标准 SQL DELETE FROM t WHERE id 1; UPDATE t SET val 0 WHERE id 1; -- 无时间约束 TDengine DELETE FROM t WHERE ts T1 AND ts T2; -- 必须有时间范围条件 UPDATE t SET val 0 WHERE ts 2026-06-04 12:00:00; -- ts 是主键唯一定位行 -- 不支持 WHERE val 100 -- 必须含 ts5. 索引标准 SQL CREATE INDEX idx ON t (name); CREATE INDEX idx ON t (name, age); -- 组合索引 TDengine -- 数据列无显式索引 -- 块 SMA 自动统计 -- Tag 索引 CREATE INDEX idx ON super_table (tag_column); -- 不支持组合索引 -- 不支持函数索引6. 事务与一致性标准 SQL BEGIN; INSERT INTO t1 ...; INSERT INTO t2 ...; COMMIT; -- ACID 事务 TDengine -- 单语句原子单 SQL 内全成或全败 INSERT INTO t1 ..., t2 ... ; -- 跨表批量也原子 -- 不支持 BEGIN/COMMIT/ROLLBACK 跨语句事务 -- 替代业务层处理一致性7. SELECT 限制不支持/有限支持的特性 ① 复杂子查询 - 标量子查询有限 - 关联子查询不支持 ② OVER 窗口函数 - ROW_NUMBER/RANK/DENSE_RANK 不支持 - LAG/LEAD 不支持用 DIFF/MAVG 替代 ③ WITH RECURSIVE - 不支持递归 CTE ④ MERGE / UPSERT - 不支持 MERGE INTO - INSERT 天然按 ts 去重 ⑤ FULL TEXT SEARCH - 不内置全文检索8. 数据类型差异TDengine 特有 TIMESTAMP (主键) TDengine 缺少 TEXT (大文本) → 用 VARCHAR(N) BLOB (大二进制) → 用 VARBINARY(N) DATE / TIME (单独) → 都用 TIMESTAMP DECIMAL (精确小数) → 用 DOUBLE / 整数缩放 ENUM → 用 VARCHAR 应用层约束 ARRAY → 用 JSON 或拆列 注意 VARCHAR 长度按字节计N 字节 NCHAR 按字符计N 个 Unicode 字符代码示例迁移示例-- MySQL 写法CREATETABLEsensors(idINTPRIMARYKEYAUTO_INCREMENT,device_idVARCHAR(50),tsDATETIME,valueDOUBLE,INDEXidx_device(device_id));INSERTINTOsensorsVALUES(1,d001,2026-06-04 12:00,25.3);-- TDengine 改写CREATESTABLE sensors(tsTIMESTAMP,valueDOUBLE)TAGS(device_idVARCHAR(50));CREATETABLEd001USINGsensors TAGS(d001);INSERTINTOd001VALUES(2026-06-04 12:00:00,25.3);-- 或自动建表INSERTINTOd001USINGsensors TAGS(d001)VALUES(2026-06-04 12:00:00,25.3);查询改写-- MySQL ROW_NUMBERSELECT*,ROW_NUMBER()OVER(PARTITIONBYdevice_idORDERBYtsDESC)ASrnFROMsensorsWHERErn1;-- TDengine 改写用 LAST_ROWSELECTLAST_ROW(*)FROMsensorsPARTITIONBYtbname;-- MySQL LAGSELECTts,value,LAG(value)OVER(PARTITIONBYdevice_idORDERBYts)ASprevFROMsensors;-- TDengine 改写用 DIFFSELECTts,value,value-DIFF(value)ASprevFROMsensors;-- 或不直接计算 LAG用 DIFF 表示变化-- MySQL MERGEMERGEINTOtargetUSINGsourceONtarget.idsource.idWHENMATCHEDTHENUPDATESETvalsource.valWHENNOTMATCHEDTHENINSERT(id,val)VALUES(source.id,source.val);-- TDengine 改写INSERTINTOtargetSELECT*FROMsource;-- ts 主键天然去重窗口改写-- 标准 OVER 窗口SELECTid,ts,AVG(val)OVER(ORDERBYtsROWSBETWEEN5PRECEDINGANDCURRENTROW)ASrollingFROMt;-- TDengine MAVGSELECTts,MAVG(val,6)ASrollingFROMt;-- 标准 PARTITION BY ts BUCKETSELECTTIMESTAMP_BUCKET(ts,INTERVAL1 hour)ASh,AVG(val)FROMtGROUPBYh;-- TDengine INTERVALSELECT_wstart,AVG(val)FROMtINTERVAL(1h);性能考量迁移性能预期场景TDengine vs MySQL/PostgreSQL单设备写入10x~50x批量写入100x时序聚合查询10x~100x任意 JOIN受限设计上不擅长全文检索不支持复杂 OLAP部分支持设计原则关系数据库习惯TDengine 改写自增 ID 主键时间戳 Tag单表千万行拆分为超级表 子表任意 JOIN限制为时间相关OVER 窗口时序窗口函数事务业务层处理FAQQ1: 标准 SQL 哪些功能不支持主要不支持复杂 OVER 窗口、递归 CTE、跨语句事务、全文检索、复杂关联子查询。Q2: 应用迁移成本大吗时序场景迁移简单90% SQL 可用复杂 OLTP不适合应保留原数据库Q3: 能用 ORM 框架吗支持 JDBC/ODBC/Python DB-API 等标准接口主流 ORM 大多兼容。某些 ORM 的高级特性如懒加载、复杂查询构造需注意。Q4: 时区怎么处理存储 UTC客户端按时区显示。建议明确指定时区。Q5: 能与现有关系数据库共存吗可以。常见架构TDengine时序数据MySQL/Postgres业务元数据应用层组合查询参考系统构架篇01-《TDengine 整体架构全景》02-《集群拓扑深度解析》03-《MNode 内部机制深度解析》04-《RPC 通信层深度解析》05-《VNode 生命周期》06-《RAFT 共识协议》07-《端到端的消息流》数据模型01-《数据库创建与参数详解》02-《超级表/子表/普通表》03-《支持数据类型深度解析》04-《TDengine Tag 设计哲学与 Schema 变更机制》05-《TDengine 虚拟表实现原理》存储引擎01-《TDengine 存储引擎概览》02-《TDengine MemTable 深度解析》03-《TDengine WAL 预写日志机制》04-《TDengine 数据文件格式》05-《TDengine Commit 与 Flush 机制 》06-《TDengine Compaction 合并策略 》07-《TDengine 数据保留与 TTL》08-《TDengine 压缩编码机制》09-《TDengine Cache 与 Last 查询加速》10-《TDengine 逻辑计划生成》查询引擎01-《TDengine 查询引擎概览》02-《TDengine SQL 解析与词法分析》03-《TDengine 语义分析与 AST 重写》04-《TDengine 逻辑计划生成》05-《TDengine 物理计划生成》06-《TDengine 扫描算子》07-《TDengine 聚合算子》08-《TDengine 连接算子》09-《TDengine 排序、填充与投影》10-《TDengine 分布式查询执行》11-《TDengine EXPLAIN 与查询优化》数据写入01-《TDengine SQL INSERT》02-《TDengine 无模式写入》03-《TDengine STMT 写入》04-《TDengine 写入内部流程》05-《TDengine 数据更新删除》数据订阅01-《TDengine 数据订阅》02-《TDengine 订阅 vs Kafka》03-《TDengine TMQ 消费流程》04-《TDengine 内部机制》05-《TDengine TMQ 最佳实践》预聚合01-《TDengine RSMA》02-《TDengine TSMA — 时间维度的物化聚合视图》03-《TDengine SMA 内部实现》索引01-《TDengine Tag 索引》02-《TDengine SMA 索引》SQL 语句01-《TDengine DDL》02-《TDengine DML SELECT》03-《TDengine DML 函数完整参考》04-《TDengine JOIN 完整语法》05-《TDengine 窗口完整语法》06-《TDengine 操作符与表达式》07-《TDengine 系统表》关于 TDengineTDengine 专为物联网IoT平台、工业大数据平台设计。其中TDengine TSDB 是一款高性能、分布式的时序数据库Time Series Database同时它还带有内建的缓存、流式计算、数据订阅等系统功能TDengine IDMP 是一款AI原生工业数据管理平台它通过树状层次结构建立数据目录对数据进行标准化、情景化并通过 AI 提供实时分析、可视化、事件管理与报警等功能。
RELATED

相关推荐

qwenpaw-plugin-file-tools QwenPaw增强文件工具 更新 v1.1.1

qwenpaw-plugin-file-tools QwenPaw增强文件工具 更新 v1.1.1

更新日志 v1.1.0 (2026-07-22) 字节级操作 缩进工具 跨行正则 安全增强 新增工具(6 个) 字节级工具 4 个:file_tools_read_bytes(hex 读取)、file_tools_write_bytes(全量/部分覆盖写入)、…

📅 2026/8/23 9:21:15
【HarmonyOS学习笔记】2026-07-22 | speechRecognizer 踩坑实录2

【HarmonyOS学习笔记】2026-07-22 | speechRecognizer 踩坑实录2

date: 2026-07-22 tags: [HarmonyOS, speechRecognizer, 语音识别, 异步回调, 状态管理, ArkTS] type: 踩坑实录 1️⃣ 现象(发生了什么?) 使用 speechRecognizer 做语音输入,踩了一串连环坑: 用户说话停顿后消息&q…

📅 2026/8/23 9:21:16
Visual Studio单步调试技巧与高级应用指南

Visual Studio单步调试技巧与高级应用指南

1. Visual Studio单步调试核心概念解析单步调试是开发过程中最常用的调试技术之一,它允许开发者逐行执行代码,观察程序状态的变化过程。在Visual Studio中,单步调试功能已经发展成为一个完整的调试生态系统,包含多种调试模式和辅助…

📅 2026/8/23 9:21:16
MORE NEWS

更多资讯

📰

战66新手避坑:市政公用工程代码性能优化实录

战66新手避坑:市政公用工程代码性能优化实录 刚把网上抄的“战66”数据清洗脚本跑起来,报错堆满屏幕,CPU 直接飙到 90%,内存泄漏得比漏水的市政管道还快。这种“复制来的代码跑不通不知道怎么调”的崩溃感,是无数市政公用工程数字化从业者的…

📰

同城小程序源码怎么选?零基础搭建多城市运营全攻略

做了这么多年互联网项目,我越来越觉得同城本地生活是个被低估的赛道。不管是跑腿、家政、二手交易还是本地信息发布,每个城市都有需求,但大平台往往覆盖不到那么细。所以“同城小程序源码”这个东西才会一直有热度,因为它把一套系…

📰

M3U8 索引解析与调试:从 Vue 播放到视频转换失败的完整排查指南

1. M3U8 在开发调试里,为什么总是让人想摔键盘先说一个我自己的场景。上个月接了一个 H5 视频项目的维护需求,用户在 iOS 的 Safari 里点播放,黑屏转圈十秒,然后弹“无法完成操作”。我用电脑打开同一个地址,播放器秒出…

📰

如何让声音变得好听图解原理

3招搞定音频降噪源码解析,让声音变得好听 盯着屏幕上一堆红色的 StackTrace,报错信息密密麻麻,是不是瞬间头大?明明只是想让录出来的语音清晰一点,结果代码一跑,全是 AudioFormatException 或者…

📰

OpenCV全景图像拼接原理与实战:从特征匹配到透视变换

简介:一套基于Python与OpenCV的多图全景拼接源码及文档说明,面向高校期末大作业与Python课程设计场景,解决多张图片自动拼接为全景图的需求。项目基于OpenCV实现特征点提取、图像配准与融合拼接,代码含清晰注释,简单部…

📰

气候资源评价与旅游康养适宜性分析实践

1. 项目背景与核心价值石柱县作为重庆东北部的生态屏障区,其气候资源评价与旅游康养适宜性分析对区域发展具有双重意义。从专业角度看,这类研究需要综合应用气象学、地理信息系统和旅游医学的交叉知识。我在参与类似项目时发现,县域尺度的气候…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬