往期回顾
国产数据库创新集锦——小count也有大智慧⓵顺其自然 ,性能很拉垮
国产数据库创新集锦——小count也有大智慧⓶普通索引,单车变摩托
国产数据库创新集锦——小count也有大智慧⓷位图索引,摩托变赛车
国产数据库创新集锦——小count也有大智慧⓸物化视图,赛车变飞机
国产数据库创新集锦——小count也有大智慧⓹缓存结果,飞机变火箭
彬老师:秘诀就是在查询中添加’rownum=1’条件:select count(*) from t where rownum=1。就这么简单,性能立刻飙升。
大饼:等等,加上rownum=1后,查询不是只返回第一行了吗?这和原来的count(*)完全不等价啊!
彬老师:表面上看确实不同,但在特定场景下,它们是等价的。具体来说,很多开发人员使用count(*)只是为了判断表中是否有数据,比如这样的代码:
begin select count(*) into v_cnt from t1; if v_cnt > 0 then ...A逻辑... -- 表中有记录时执行 else ...B逻辑... -- 表中没有记录时执行 end if; end;
彬老师:其实这和判断表的首条记录是否存在是一样的,如下:
begin -- 检查t1表是否有数据,只需找到一条记录即可,比全表COUNT(*)更高效 select count(*) into v_cnt from t1 where rownum=1; if v_cnt=1 then ...A逻辑... -- 表中有数据时执行此逻辑 else ...B逻辑... -- 表中无数据时执行此逻辑 end if; end;
小渣:妙,平地起惊雷!只访问第1条判断是否有记录,而不必计算全部记录数。表再大也不怕了!

弘老师:这一次次的优化过程还是充满智慧的,不仅要深刻理解执行计划、索引、体系架构等数据库技术,还要精通业务架构和场景需求,简单的背后不简单,探索永无止境。
彬老师:弘老师说得好,探索永无止境。那我就再延伸一下:如果建索引被限制,业务不允许空间换时间,也不可以等价改写,该怎么办?
小渣:这…想不出来。
未完待续… 国产数据库创新集锦——小count也有大智慧⓻达梦登场,小count大智慧
公众号:收获不止数据库
微信:ljbyxl1213
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9091385/viewspace-3080012/ ,如需转载,请注明出处,否则将追究法律责任。