MariaDB慢查询优化求助:4000万行表关联更新查询优化
MariaDB更新语句性能优化方案
针对你提供的更新语句执行缓慢的问题,结合table2数据量达4000万行的情况,给出以下优化方案:
创建复合索引加速子查询
子查询是性能瓶颈核心,table2的查询依赖uid和opt两个条件,创建复合索引可以让数据库直接通过索引统计行数,无需扫描全表:CREATE INDEX idx_uid_opt ON table2(uid, opt);注:如果已有包含这两个字段的有效索引,可跳过此步骤。
用JOIN改写子查询
部分场景下,JOIN的执行计划比子查询更高效,改写后的语句如下:UPDATE table1 t1 JOIN (SELECT COUNT(*) AS cnt FROM table2 WHERE uid = 1011 AND opt = 1) t2 SET t1.ANS = t2.cnt WHERE t1.uid = 1011;优化table1的更新定位
如果table1数据量较大,给uid字段创建索引可以快速定位需要更新的行,避免扫描table1全表:CREATE INDEX idx_table1_uid ON table1(uid);更新表统计信息
若table2长期未维护统计信息,优化器可能生成低效执行计划,执行以下命令更新统计信息:ANALYZE TABLE table2;
内容的提问来源于stack exchange,提问作者ccsvega
相关产品推荐
相关产品推荐

