最快速度取最新一条数据-Mysql,Sql server,access数据库

最快的方法是用临时全局内存变量:

复制代码
-- 步骤1:定义全局变量(存订单表最新ID)
SET GLOBAL latest_order_id = 0; -- 全局变量,所有会话可见,重启丢失

SQL Server 无 "全局内存变量

预存最新 ID 的索引表例子1个 2,MYSQL,SQL SERVER存储过程有没有永久内存变量的方法,直接把常要查询表的ID存到变量中,这样内存表,索引表也不用了

一、预存最新 ID 的索引表示例(MySQL + SQL Server 通用结构)

1. MySQL 版本(含内存表 / 普通表两种方案)
方案 A:普通持久化索引表(推荐,兼顾性能与数据安全)
sql 复制代码
-- 1. 创建最新ID索引表(持久化,重启不丢失)
CREATE TABLE latest_id_map (
    table_name VARCHAR(50) NOT NULL COMMENT '业务表名',
    latest_id BIGINT NOT NULL COMMENT '最新ID',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (table_name) -- 主键保证表名唯一,查询O(1)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='各表最新ID映射表';

-- 2. 初始化数据(比如订单表、用户表)
INSERT INTO latest_id_map (table_name, latest_id) 
VALUES ('order_table', 0), ('user_table', 0) 
ON DUPLICATE KEY UPDATE latest_id = VALUES(latest_id);

-- 3. 触发器同步(订单表插入时自动更新最新ID)
DELIMITER //
CREATE TRIGGER tr_order_table_after_insert
AFTER INSERT ON order_table
FOR EACH ROW
BEGIN
    -- 新插入ID大于当前缓存ID时更新
    UPDATE latest_id_map 
    SET latest_id = NEW.id, update_time = CURRENT_TIMESTAMP
    WHERE table_name = 'order_table' AND NEW.id > latest_id;
END //
DELIMITER ;

-- 4. 查询订单表最新记录(通过索引表)
SELECT * FROM order_table 
WHERE id = (SELECT latest_id FROM latest_id_map WHERE table_name = 'order_table');
方案 B:MEMORY 引擎内存表(极致性能,重启丢失,需兜底)

sql

sql 复制代码
-- 1. 创建内存版索引表(重启后数据清空,需配合定时任务兜底)
CREATE TABLE latest_id_map_mem (
    table_name VARCHAR(50) NOT NULL,
    latest_id BIGINT NOT NULL,
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (table_name)
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4;

-- 2. 兜底逻辑:启动时从持久化表同步
INSERT INTO latest_id_map_mem (table_name, latest_id)
SELECT table_name, latest_id FROM latest_id_map
ON DUPLICATE KEY UPDATE latest_id = VALUES(latest_id);
2. SQL Server 版本(内存优化表)

sql

sql 复制代码
-- 1. 创建内存优化的最新ID索引表(2014+支持,持久化数据)
CREATE TABLE latest_id_map (
    table_name NVARCHAR(50) NOT NULL,
    latest_id BIGINT NOT NULL,
    update_time DATETIME DEFAULT GETDATE() ON UPDATE GETDATE(),
    CONSTRAINT PK_latest_id_map PRIMARY KEY NONCLUSTERED (table_name)
) WITH (
    MEMORY_OPTIMIZED = ON, -- 内存优化
    DURABILITY = SCHEMA_AND_DATA -- 架构+数据都持久化
);

-- 2. 触发器同步订单表最新ID
CREATE TRIGGER tr_order_table_after_insert
ON order_table
AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @new_max_id BIGINT = (SELECT MAX(id) FROM inserted);
    -- 存在则更新,不存在则插入
    MERGE latest_id_map AS t
    USING (SELECT 'order_table' AS table_name, @new_max_id AS latest_id) AS s
    ON t.table_name = s.table_name
    WHEN MATCHED AND t.latest_id < s.latest_id THEN
        UPDATE SET t.latest_id = s.latest_id, t.update_time = GETDATE()
    WHEN NOT MATCHED THEN
        INSERT (table_name, latest_id) VALUES (s.table_name, s.latest_id);
END;

-- 3. 查询订单表最新记录
SELECT * FROM order_table 
WHERE id = (SELECT latest_id FROM latest_id_map WHERE table_name = 'order_table');

二、MySQL/SQL Server 能否用 "永久内存变量" 存最新 ID?

核心结论:原生不支持 "永久内存变量"(重启后丢失),但可通过 "会话变量 + 全局变量 + 兜底逻辑" 模拟,或用系统级缓存替代,以下是具体方案:

1. MySQL 方案(全局变量 + 初始化脚本)

MySQL 的 @@GLOBAL.xxx 全局变量是内存级的,重启后失效,需配合启动脚本恢复:

sql 复制代码
-- 步骤1:定义全局变量(存订单表最新ID)
SET GLOBAL latest_order_id = 0; -- 全局变量,所有会话可见,重启丢失

-- 步骤2:触发器同步变量(插入订单时更新)
DELIMITER //
CREATE TRIGGER tr_order_update_global_var
AFTER INSERT ON order_table
FOR EACH ROW
BEGIN
    IF NEW.id > @@GLOBAL.latest_order_id THEN
        SET GLOBAL latest_order_id = NEW.id;
    END IF;
END //
DELIMITER ;

-- 步骤3:查询最新记录(直接用变量,无需查索引表)
SELECT * FROM order_table WHERE id = @@GLOBAL.latest_order_id;

-- 步骤4:兜底(重启后恢复变量)
-- 编写启动脚本(如 /etc/mysql/init.d/restore_var.sh),内容:
-- mysql -uroot -p123456 -e "SET GLOBAL latest_order_id = (SELECT MAX(id) FROM order_table);"
-- 将脚本加入MySQL启动项,确保重启后自动恢复变量值

⚠️ MySQL 全局变量限制:

  • 变量名不能随意定义(需符合规范),且权限要求高(需 SUPER 权限);
  • 仅适合单实例场景,主从架构下变量无法同步;
  • 数据量大时,触发器更新变量的性能损耗可忽略(单条赋值操作)。
2. SQL Server 方案(全局临时表 + 扩展存储过程)

SQL Server 无 "全局内存变量",但可通过「全局临时表 + 启动存储过程」模拟:

sql 复制代码
-- 步骤1:创建全局临时表(内存级,所有会话可见,实例重启丢失)
CREATE TABLE ##LatestIDCache (
    table_name NVARCHAR(50) PRIMARY KEY,
    latest_id BIGINT
);

-- 步骤2:初始化临时表(存订单表最新ID)
INSERT INTO ##LatestIDCache (table_name, latest_id)
VALUES ('order_table', (SELECT MAX(id) FROM order_table))
ON DUPLICATE KEY UPDATE latest_id = VALUES(latest_id);

-- 步骤3:触发器同步临时表(插入订单时更新)
CREATE TRIGGER tr_order_update_temp_table
ON order_table
AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @new_max_id BIGINT = (SELECT MAX(id) FROM inserted);
    UPDATE ##LatestIDCache 
    SET latest_id = @new_max_id 
    WHERE table_name = 'order_table' AND @new_max_id > latest_id;
END;

-- 步骤4:查询最新记录(直接查全局临时表,内存级速度)
SELECT * FROM order_table 
WHERE id = (SELECT latest_id FROM ##LatestIDCache WHERE table_name = 'order_table');

-- 步骤5:兜底(实例启动时重建临时表)
-- 1. 创建启动存储过程
CREATE PROCEDURE sp_restore_latest_id_cache
AS
BEGIN
    IF OBJECT_ID('tempdb..##LatestIDCache') IS NULL
    BEGIN
        CREATE TABLE ##LatestIDCache (
            table_name NVARCHAR(50) PRIMARY KEY,
            latest_id BIGINT
        );
        -- 从业务表恢复最新ID
        INSERT INTO ##LatestIDCache (table_name, latest_id)
        VALUES ('order_table', (SELECT MAX(id) FROM order_table));
    END
END;

-- 2. 将存储过程加入SQL Server启动项(需sa权限)
EXEC sp_procoption 'sp_restore_latest_id_cache', 'startup', 'on';
3. 更优替代方案:系统级缓存(Redis/Memcached)

如果追求 "永久内存变量" 的核心目标(高速读取 + 重启不丢),不建议用数据库原生变量 / 临时表,而是用外部缓存:

sql

复制代码
-- 以Redis为例(伪代码)
-- 1. 插入订单时,更新Redis(通过应用程序/存储过程调用Redis命令)
SET latest_order_id = NEW.id; -- Redis SET操作,O(1)速度

-- 2. 查询最新记录时,先从Redis取ID,再查业务表
SELECT * FROM order_table WHERE id = (redis.get('latest_order_id'));

-- 3. Redis兜底:若key不存在,从业务表查MAX(id)并回写Redis
IF redis.get('latest_order_id') IS NULL THEN
    SET @max_id = (SELECT MAX(id) FROM order_table);
    redis.set('latest_order_id', @max_id);
END IF;

三、方案对比:索引表 vs 内存变量 vs 外部缓存

方案 性能 持久性 维护复杂度 适用场景
预存 ID 索引表(持久化) 🥈快 ✅永久 中小数据量、追求稳定性
数据库内存变量 / 临时表 🔥最快 ❌重启丢 高频查询、可接受重启兜底
Redis/Memcached 缓存 🔥最快 ✅永久(持久化) 高并发、分布式架构

四、核心建议

  1. 不推荐纯内存变量:数据库原生内存变量重启丢失,需额外写兜底脚本,维护成本高;
  2. 中小场景选索引表:实现简单、数据安全,性能足够满足大部分高频查询;
  3. 高并发选 Redis 缓存:速度与持久性兼顾,且支持分布式架构,是企业级最优解;
  4. 避免过度设计 :若单表查询 MAX(id) 耗时 < 1ms,无需做任何缓存 / 索引表,原生查询已足够。

核心是 "预存最新 ID" 能否替代实时计算,以及 "存储过程是否最优"------ 结论先抛:预存最新 ID 的索引表 + 存储过程是高频查询场景下的最优解,但你的写法和认知有几个关键细节需要修正,下面逐一拆解:

一、先纠正核心认知:你的对比写法存在性能误区

1. 错误:SELECT * FROM 订单表 WHERE id=MAX(ID) 是语法错误

MAX(ID) 是聚合函数,不能直接放在 WHERE 子句中(聚合函数需在 HAVING/ 子查询中),正确写法是:sql

复制代码
-- 正确但性能一般的写法(实时计算MAX)
SELECT * FROM 订单表 WHERE id = (SELECT MAX(id) FROM 订单表);
2. 性能对比:预存 ID vs 实时查 MAX (ID) vs 你的 "两次查询"
写法 执行逻辑 性能(大数据量) 核心问题
实时 MAX(id) 查单条记录 聚簇索引顶端查找 MAX (ID) → 索引定位记录 🥈次快(O (1)+O (1)) 高频查询时重复计算 MAX
你的 "两次查询"(查索引表→查业务表) 查索引表(O (1))→ 查业务表(O (1)) 🥈次快(同上面) 多一次表查询,无性能优势
索引表 + 存储过程(预存 ID + 直接查询) 读索引表(O (1))→ 查业务表(O (1)) 🔥最快(少重复计算) 需保证 ID 实时同步
直接 TOP 1 * FROM 订单表 ORDER BY id DESC 聚簇索引顶端扫描(O (1)) 🥈次快 高频查询时重复排序(无意义)

二、"表名 + 最新 ID" 索引表的核心价值:不是 "更快一次查询",而是 "减少重复计算"

1. 什么时候值得做?
  • ✅ 高频查询:比如每秒几十 / 上百次查 "最新 ID",实时计算 MAX(id) 会重复消耗数据库资源(哪怕单次 O (1),累计开销大);
  • ✅ 多表统一查询:比如要查订单、用户、商品等 10 + 张表的最新 ID,索引表可一次性返回,无需逐个表查 MAX(id)
  • ✅ 跨库 / 分表场景:分表后单表 MAX(id) 无意义,需汇总到索引表才能拿到全局最新 ID。
2. 什么时候没必要做?
  • ❌ 低频查询:比如几分钟查一次最新 ID,实时 MAX(id) 的开销可忽略,维护索引表反而增加复杂度;
  • ❌ 单表小数据量:比如订单表只有几万条,MAX(id) 耗时 < 1ms,索引表的收益远低于维护成本。

三、最优方案:索引表(+ 内存表)+ 存储过程(附完整实现)

1. 第一步:创建 "最新 ID 索引表"(建议加内存优化,视数据库而定)
数据库 表结构(核心字段) 优化方式
SQL Server 普通表 + 主键(表名)+ 非聚集索引;或内存优化表(2014+) MEMORY_OPTIMIZED = ON
MySQL 普通表 + 主键(表名);或 MEMORY 引擎内存表 ENGINE=MEMORY
Access 普通表 + 主键(表名)(无内存表) 定期压缩数据库

示例(SQL Server):sql

sql 复制代码
-- 创建索引表(内存优化版,2014+支持)
CREATE TABLE LatestID_Table (
    TableName NVARCHAR(50) NOT NULL, -- 表名(如'订单表')
    LatestID BIGINT NOT NULL,        -- 最新ID
    UpdateTime DATETIME DEFAULT GETDATE(), -- 最后更新时间
    CONSTRAINT PK_LatestID_Table PRIMARY KEY NONCLUSTERED (TableName)
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA); -- 持久化数据
2. 第二步:维护最新 ID 的同步(关键!避免数据不一致)

索引表的核心问题是 "最新 ID 如何实时更新",推荐两种方式:

方式 1:触发器(实时同步,推荐)

给业务表(如订单表)加插入 / 更新触发器,新增数据时自动更新索引表:

sql 复制代码
-- 订单表触发器(SQL Server示例)
CREATE TRIGGER TR_OrderTable_UpdateLatestID
ON 订单表
AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;
    -- 获取插入的最大ID
    DECLARE @NewMaxID BIGINT = (SELECT MAX(id) FROM inserted);
    -- 更新索引表(存在则更新,不存在则插入)
    MERGE LatestID_Table AS T
    USING (SELECT '订单表' AS TableName, @NewMaxID AS LatestID) AS S
    ON T.TableName = S.TableName
    WHEN MATCHED THEN UPDATE SET T.LatestID = S.LatestID, T.UpdateTime = GETDATE()
    WHEN NOT MATCHED THEN INSERT (TableName, LatestID) VALUES (S.TableName, S.LatestID);
END;
方式 2:定时任务(适合低频更新场景)

如果业务表插入频率低,可通过 Job 定时同步(如每分钟执行一次):

sql

复制代码
-- 定时更新订单表最新ID(SQL Server Agent Job)
UPDATE LatestID_Table 
SET LatestID = (SELECT MAX(id) FROM 订单表), UpdateTime = GETDATE()
WHERE TableName = '订单表';
3. 第三步:存储过程(封装查询逻辑,极致性能)

存储过程的优势:预编译执行计划、减少网络交互、封装复杂逻辑,比直接写 SQL 更快:

sql 复制代码
-- 创建存储过程:根据表名查最新记录(SQL Server示例)
CREATE PROCEDURE GetLatestRecord
    @TableName NVARCHAR(50) -- 输入参数:表名(如'订单表')
AS
BEGIN
    SET NOCOUNT ON; -- 减少网络传输
    DECLARE @LatestID BIGINT, @Sql NVARCHAR(MAX);

    -- 第一步:从索引表快速获取最新ID(O(1))
    SELECT @LatestID = LatestID 
    FROM LatestID_Table 
    WHERE TableName = @TableName;

    -- 第二步:验证ID有效性(避免索引表数据不一致)
    IF @LatestID IS NULL
    BEGIN
        -- 兜底:实时查MAX(ID)并更新索引表
        SELECT @LatestID = MAX(id) FROM 订单表 WHERE 1=1;
        UPDATE LatestID_Table SET LatestID = @LatestID WHERE TableName = @TableName;
    END

    -- 第三步:查询业务表最新记录(索引定位,O(1))
    SET @Sql = N'SELECT * FROM ' + QUOTENAME(@TableName) + N' WHERE id = @LatestID';
    EXEC sp_executesql @Sql, N'@LatestID BIGINT', @LatestID;
END;
4. 调用存储过程(极简 + 高效)
复制代码
-- 查订单表最新记录
EXEC GetLatestRecord '订单表';

四、关键优化点(决定最终性能)

1. 内存表的使用边界
  • SQL Server:内存优化表适合高频读写,需注意 DURABILITY 配置(SCHEMA_ONLY 重启丢失数据,SCHEMA_AND_DATA 持久化);
  • MySQL:MEMORY 引擎表速度极快,但数据重启丢失,建议搭配定时同步 + 持久化表做兜底;
  • Access:无原生内存表,可将索引表放在内存盘(如 RAMDisk),但需手动备份。
2. 避免 "两次查询" 的额外开销

你的原始写法是 "先查索引表→再查业务表",本质是两次独立查询;而存储过程中通过变量缓存最新 ID,再执行查询,减少了网络往返次数(应用程序只需调用一次存储过程,而非两次 SQL),这是性能提升的关键。

3. 一致性保障(避坑!)
  • 触发器同步可能有性能损耗(高并发插入时),可改为 "异步更新"(如消息队列);
  • 定时任务同步会有 "数据延迟",需根据业务容忍度调整频率(如 1 秒 / 1 分钟);
  • 建议给索引表加 UpdateTime 字段,查询时验证是否过期(如超过 5 分钟未更新则兜底查 MAX (ID))。

五、性能对比(最终结论)

方案 单次查询耗时 高频查询(1000 次 / 秒) 维护复杂度 适用场景
实时 MAX(id) 查记录 0.1ms 累计耗时 100ms 低频查询、小数据量
索引表 + 存储过程(内存优化) 0.05ms 累计耗时 50ms 高频查询、大数据量
你的 "两次查询" 写法 0.1ms 累计耗时 100ms 不推荐(无优势)

六、总结

  1. 索引表 + 内存表是有效的:但核心价值是 "减少高频场景下的重复聚合计算",而非单次查询的微秒级提升;
  2. 存储过程是最优封装:预编译 + 减少网络交互,比直接写两次 SQL 快,且逻辑更易维护;
  3. 同步机制是核心:触发器(实时)/ 定时任务(低频)二选一,必须避免索引表和业务表数据不一致;
  4. 小数据量 / 低频查询无需做 :实时 MAX(id) 已经足够快,过度设计反而增加维护成本。

在 Access、SQL Server、MySQL 中,不存在通用的 SELECT LAST(ID) 语法 ,且 "取主键 ID 最新一条" 的最优写法需结合数据库特性(索引、引擎、版本),核心原则是:利用主键索引(聚簇索引)的有序性,避免全表扫描。以下是各数据库的最快写法及原理分析:

核心前提

主键 ID 通常是自增整数(IDENTITY/AUTO_INCREMENT)时间相关的有序值,且主键默认会创建聚簇索引(SQL Server/InnoDB)/ 主键索引(Access/MyISAM),因此基于主键排序的查询效率极高。

一、MySQL(最快写法)

场景 1:自增主键(AUTO_INCREMENT)

MySQL 中自增主键默认是聚簇索引(InnoDB),直接取最大值是最优解(无需排序,索引扫描一次):

sql 复制代码
-- 写法1:取最大ID(最快,O(1) 索引查找)
SELECT MAX(id) AS latest_id FROM 表名;

-- 写法2:取最新一条完整记录(仅返回1条,避免全表排序)
SELECT * FROM 表名 ORDER BY id DESC LIMIT 1;
场景 2:非自增主键(但有序)

若主键是 UUID / 字符串(无自增),需按创建时间排序(需给时间字段建索引):

复制代码
SELECT * FROM 表名 ORDER BY create_time DESC LIMIT 1;
关键优化
  • 避免 SELECT *:仅查需要的字段,减少 IO;
  • 主键索引必须存在:无索引时 MAX(id) 会全表扫描,效率暴跌;
  • InnoDB 引擎优先:MyISAM 无聚簇索引,但 MAX(id) 仍比排序快。

二、SQL Server(最快写法)

场景 1:自增主键(IDENTITY)

SQL Server 主键默认是聚簇索引,两种最优写法:

复制代码
-- 写法1:取最大ID(最快,聚簇索引顶端查找)
SELECT MAX(id) AS latest_id FROM 表名;

-- 写法2:取最新一条完整记录(TOP 1 + 排序,仅扫描索引顶端)
SELECT TOP 1 * FROM 表名 ORDER BY id DESC;

-- 写法3(SQL Server 2012+):等价 TOP 1,语法更灵活
SELECT * FROM 表名 ORDER BY id DESC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY;
场景 2:非自增主键

按时间字段排序(需给时间字段建索引):

复制代码
SELECT TOP 1 * FROM 表名 ORDER BY create_time DESC;
关键优化
  • 避免 SELECT *:聚簇索引包含所有字段,但只查需要的字段仍能减少内存消耗;
  • 禁用 WITH TIESTOP 1 WITH TIES 会扫描更多行,仅需 1 条时无需加;
  • 聚簇索引碎片整理:碎片多会影响索引扫描效率。

三、Access(最快写法)

Access 是文件型数据库,主键索引为 "主索引",语法与 SQL Server 接近但有差异:

场景 1:自增主键(自动编号)
复制代码
-- 写法1:取最大ID(最快,索引查找)
SELECT MAX(id) AS latest_id FROM 表名;

-- 写法2:取最新一条完整记录(Access 专用 TOP 1)
SELECT TOP 1 * FROM 表名 ORDER BY id DESC;
注意事项
  • Access 不支持 LIMIT/OFFSET,仅能用 TOP N
  • 避免使用 LAST() 函数:SELECT LAST(id) FROM 表名 是 Access 内置函数,但效率极低(需全表扫描,且依赖记录存储顺序,不可靠);
  • 主键索引必须设为 "主索引":否则 MAX(id) 会全表扫描。

四、各数据库性能对比(核心结论)

操作 MySQL SQL Server Access 性能等级
取最大 ID(MAX(id) 聚簇索引 O (1) 聚簇索引 O (1) 主索引 O (1) 🔥最快
取最新记录(排序 + 限制) ORDER BY id DESC LIMIT 1 TOP 1 + ORDER BY id DESC TOP 1 + ORDER BY id DESC 🥈次快
Access LAST(id) - - 全表扫描 O (n) 🚫最慢

五、通用优化原则

  1. 主键必须是自增 / 有序 :无序主键(如 UUID)会导致排序耗时,建议新增 create_time 字段并建索引;
  2. 避免全表操作:任何不带索引的排序 / 聚合都会全表扫描,数据量大时不可用;
  3. 仅查必要字段SELECT idSELECT * 快(减少数据传输 / IO);
  4. 大数据量场景:可通过分表 / 分区、缓存(如 Redis 存最新 ID)进一步提升性能。

六、错误写法示例(避坑)

sql 复制代码
-- 错误1:Access 使用 LAST(id)(全表扫描)
SELECT LAST(id) FROM 表名;

-- 错误2:MySQL 无 LIMIT 的排序(全表排序)
SELECT * FROM 表名 ORDER BY id DESC;

-- 错误3:无索引的 MAX(create_time)(全表扫描)
SELECT MAX(create_time) FROM 表名; -- 需给 create_time 建索引
相关推荐
0xDevNull4 小时前
MySQL数据冷热分离详解
后端·mysql
科技小花4 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸4 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain4 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希5 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神5 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员5 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java5 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿5 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴6 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存