SQL优化思想⓶--让SQL跑得更慢一些!
SQL优化思想⓵--不优化或许是最好的优化!
引言
我们常常追求"让SQL跑得更快"。然而,L老师最近的举动颠覆了这一传统观念。他特意让部分SQL运行得更慢,却大幅提升了YYY平台的整体性能。这一反常操作立即引发了大家的好奇,纷纷向他请教其中奥妙。
是的,从全局出发,适当地让部分SQL慢下来,有时还真是对的。
原本我计划直接讲解SQL优化的方法论,但鉴于这一思想很有启发性,能对后续整体方法论的理解形成铺垫,因此插入此集。接下来,让我们进入正文。
0
没听错,让SQL跑得更慢一些!
1
案例1:引入并行,你快他慢!
L:首先说说A模块,我发现部分SQL设置了极高的并行度,初衷是提速。结果,这条SQL确实运行得很快,可惜整个系统的响应时间反而变长,语句类似如下。
-- 在大表上使用并行度执行查询SELECT /*+ PARALLEL(t, 16) */
COUNT(*)
FROM t_large_table t
...
Q:为什么会这样?
L:高并行度意味着更多的CPU和内存资源被单个查询所占用。在资源有限的环境中,这种做法会抢占其他SQL所需的资源,导致整体系统的吞吐量下降。优化不仅是提升某一条SQL的性能,更是要平衡系统中各个部分的资源分配。
随后我取消了该SQL的并行度,虽然其执行速度有所放慢,但释放出来的系统资源可以被其他关键SQL所利用,提升整个系统的稳定性和响应速度。这是一种“以慢带快”的优化思路。
W:明白了,资源总是有限的,需要合理分配。
L:确实如此。这让我想起了战国时期的"围魏救赵"策略。当时,魏国大举进攻赵国,动用了大部分兵力,以至于留守本土的军队不多。齐国并没有直接派兵支援赵国,而是攻打魏国本土。迫使魏军撤回攻赵的大军,最终赵国获救。这与我们的SQL优化有异曲同工之妙,都是利用资源有限的道理,通过调整分配来达成目的。
W:哈哈,并行SQL和围魏救赵,真有几分相似!
2
案例2:增加索引,查快写慢!
-- 添加多个索引CREATE INDEX idx_1 ON t1 (c1);
CREATE INDEX idx_2 ON t1 (c2);
CREATE INDEX idx_3 ON t1 (c3);
CREATE INDEX idx_4 ON t1 (c4);
CREATE INDEX idx_5 ON t1 (c5);...
-- 从另一个表批量插入数据INSERT INTO t1
SELECT * FROM t2
WHERE...
Q:为什么添加索引会导致写入变慢?
L:是的。这让我想起三国时期的街亭之战。马谡将军队驻扎在山上,只考虑了居高临下的优势,却忽视了缺水、补给困难和易受火攻的问题。结果被敌军切断补给并纵火,导致惨败。这与盲目增加索引很相似,专注于提高查询速度,却忽视了写入性能下降等其他重要因素。两者都是因为过于关注单一优势,而忽视了全局考虑。
3
案例3:关闭日志,险中求快!
-- 关闭日志记录(谨慎使用,仅为演示)ALTER TABLE t1 NOLOGGING;
-- 执行批量插入操作INSERT /*+ APPEND */ INTO t1 (c1, c2, c3)
SELECT c1, c2, c3
FROM t2
where ...
Q:关闭日志真的能带来显著的性能提升?
结语
让SQL跑得慢一点来优化系统的相关案例远不止以上三个,比如“二十年目睹怪现状”提到的缓存内存、“二十年前的回忆”提到的物化视图等都是类似的,限于篇幅,就不展开了。如果让大家觉得意犹未尽,敬请谅解。
我们都知道,提升SQL速度能节约成本、增强系统稳定性和改善用户体验,但更重要的是,我们需要具备整体性思维,注重平衡系统资源、数据安全与读写性能。过度追求速度,可能掏空资源、降低数据安全性。因此,找到平衡点至关重要。有时,让SQL慢一点,反而是更高明的优化!
当然,对特定的SQL任务,也有不同取舍。如果某些查询尤为关键,添加并行处理或许是最佳方案;若查询需求远大于写入,加索引或许无妨;而若某些表本身数据临时性强,关闭日志也是合理选择。
兵无常势,水无常形。SQL优化如此,做人做事亦如此。唯有具备全局视角,方能实现真正的成功。
小朋友都能懂的人工智能⓷ -惊世骇俗的狗故事 小朋友都能懂的人工智能⓸ -狗大师的修仙之路
小朋友都能懂的人工智能⓺ -注意,句中高能!
小朋友都能懂的人工智能⑪一滴墨汁成就一代画师
小朋友都能懂的人工智能⑫从画师到视频大师
小朋友都能懂的人工智能⑬AI时代,未来就业走势
数据库二十年目睹之怪现状⓵ 太!多!了!
数据库二十年目睹之怪现状⓶ 测评现形记
数据库二十年目睹之怪现状⓷ 隐蔽的套壳
数据库二十年目睹之怪现状⓸ 小黑入狱记
从DTCC专场变换窥探数据库风云
从围棋收官到秦楚大战的数据库SQL实现(上)
从围棋收官到秦楚大战的数据库SQL实现(中)
从围棋收官到秦楚大战的数据库SQL实现(下)
⓵悟!从12306改签困惑到数据库设计—高铁随记
⓶惊!12306业务系统升级也能被普通人推动?
⓷妙!探索12306车内换座的最优分配法
国产数据库第一股背后的秘密
SQL优化思想⓵--不优化或许是最好的优化!
“作弊”有理!——OceanBase2024发布会勾起我二十年前的回忆
预告:《超融合数据库》即将出版。