ITPub博客

首页 > 数据库 > 国内数据库 > 国产数据库创新集锦——小count也有大智慧⓺等价改写,平地起惊雷

国产数据库创新集锦——小count也有大智慧⓺等价改写,平地起惊雷

原创 国内数据库 作者:梁敬彬 时间:2025-04-03 20:41:34 0 删除 编辑

往期回顾

国产数据库创新集锦——小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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
历任中电福富研究院副理事长、中盾安信研究院副院长、宁德时代技术顾问等职务,受聘电信集团专家和国家十四五课题负责人,著有《收获,不止Oracle》《收获,不止SQL优化》等多本畅销数据库技术书籍。

注册时间:2024-02-06

  • 博文量
    162
  • 访问量
    198196