ITPub博客

首页 > 数据库 > Oracle > 位图与ERP场景

位图与ERP场景

原创 Oracle 作者:xuexiaogang 时间:2022-09-05 21:29:57 0 删除 编辑

   经常遇到这种场景,select count(*) from t where t.col='XXX'  其实col列就2-5种类型,这种通常来说建立一个索引的效果不好。但是去找开发谈的时候,开发说这就是2B的企业用户场景。一共就2-3家公司,又不是2C的有上万个用户,每个用户看自己的数据。这里每家公司已经是只看自己的数据了,就这样。

     看上去无解了,每次就是要实时计算。但是其实还是有办法的。比如我建立一个简单的表create table wt (id int,org varchar2(10),name varchar2(10)),按照场景写入几千万数据进去,但是ORG只有两个值A和B,大约各占50%的数据量。一般来说这样情况下建立B-TREE索引是无效的。所以要改变方式:这里创建位图索引。给那种区分度很低的场景。可以看到位图索引加持下,大约2000万数据20毫秒分组统计好。


如果查询明细带上分页:


MySQL目前不支持这种,所以不少ERP场景使用MySQL其实是不恰当的。正如MySQL首席架构师王伟说:MySQL定位6个字:轻量,快进快出。

我觉得这样说很清楚,每种数据库都有擅长的。其实就像这个位图,他也有他的限制。就是这里的值是几乎不改或者就是不改的。比如说性别,比如我们的行政区。而如果说是把经常要改的状态设置成位图就非常有问题了。

在这种所谓的统计聚合中,位图其实是把要统计的已经算好了。所以别说2000万,就是20亿这样分组,也是毫秒级别的。我也试过2亿数据分100组,1秒就够了。

如何设计如何实现,会让你收益很大,有时候已有的技术足以应付很多大数据场景。其实很多时候,计算落地远胜于实时计算。感兴趣的话看看我公众号斐波拉契数列的那个文章。往前翻使劲翻。

我本想看看PG中的位图索引,查了资料没查到。问了高手,原来是 Pg没有位图索引的, 只有bitmap scan。最后看了演示和我最初的想法不一样。

可能还有其他数据库也支持的,我暂时还不知道。正确使用MySQL和正确使用其他数据库都会有一个较好的结果。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/637517/viewspace-2913525/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle OCP/MySQL OCP OCP讲师; PostgreSQL PGCE和PCP; Oceanbase OBCA认证;TDSQL 产品技术认证;TBase 产品技术认证; 达梦数据库认证; ITPUB论坛内存数据库版主;核心专家;金牌顾问; 云和恩墨金牌讲师;

注册时间:2013-07-01

  • 博文量
    156
  • 访问量
    689937