千家信息网

如何使用MySQL位图索引解决用户画像问题

发表于:2024-11-16 作者:千家信息网编辑
千家信息网最后更新 2024年11月16日,这篇文章给大家分享的是有关如何使用MySQL位图索引解决用户画像问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。每个bigint类型包括60个记录的位信息.但是第0位表示
千家信息网最后更新 2024年11月16日如何使用MySQL位图索引解决用户画像问题

这篇文章给大家分享的是有关如何使用MySQL位图索引解决用户画像问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

每个bigint类型包括60个记录的位信息.

但是第0位表示第六十个记录的位

第1位至第59位表示第一至五十九的记录的位信息.

这样记录的位信息保存并不连续,

使用的时候还得把最右边的一位挪到最左边,不好理解还非常麻烦,性能也有损耗.

经过王工的改良,

使用如下sql替换,则保存的位信息就连续了

    SELECT             CEIL(id / 60) g60,            CEIL(id / 1200) g1200,            age grouped,            COUNT(*) total,            BIT_OR(1 << (if(MOD(id, 60)=0,60,MOD(id, 60)))) bitmap        FROM            o_huaxiang_big_0 o        GROUP BY g1200 , g60 , age

创建位图索引的整体SQL如下

truncate table bitmap20_0;insert into bitmap20_0 select   'o_huaxiang_big' table_name,  'umc_sex' column_name,  ((g1200-1)*60)*20 min_id,  ((g1200-1)*60)*20+1200 max_id,  v2.*from (    select     g1200,    grouped,    sum(total) total,     ifnull(max(case when abs((g1200-1)*20-g60)=20 then bitmap else null end),0) c20,    ifnull(max(case when abs((g1200-1)*20-g60)=19 then bitmap else null end),0) c19,    ifnull(max(case when abs((g1200-1)*20-g60)=18 then bitmap else null end),0) c18,    ifnull(max(case when abs((g1200-1)*20-g60)=17 then bitmap else null end),0) c17,    ifnull(max(case when abs((g1200-1)*20-g60)=16 then bitmap else null end),0) c16,    ifnull(max(case when abs((g1200-1)*20-g60)=15 then bitmap else null end),0) c15,    ifnull(max(case when abs((g1200-1)*20-g60)=14 then bitmap else null end),0) c14,    ifnull(max(case when abs((g1200-1)*20-g60)=13 then bitmap else null end),0) c13,    ifnull(max(case when abs((g1200-1)*20-g60)=12 then bitmap else null end),0) c12,    ifnull(max(case when abs((g1200-1)*20-g60)=11 then bitmap else null end),0) c11,    ifnull(max(case when abs((g1200-1)*20-g60)=10 then bitmap else null end),0) c10,    ifnull(max(case when abs((g1200-1)*20-g60)=9 then bitmap else null end),0) c9,    ifnull(max(case when abs((g1200-1)*20-g60)=8 then bitmap else null end),0) c8,    ifnull(max(case when abs((g1200-1)*20-g60)=7 then bitmap else null end),0) c7,    ifnull(max(case when abs((g1200-1)*20-g60)=6 then bitmap else null end),0) c6,    ifnull(max(case when abs((g1200-1)*20-g60)=5 then bitmap else null end),0) c5,    ifnull(max(case when abs((g1200-1)*20-g60)=4 then bitmap else null end),0) c4,    ifnull(max(case when abs((g1200-1)*20-g60)=3 then bitmap else null end),0) c3,    ifnull(max(case when abs((g1200-1)*20-g60)=2 then bitmap else null end),0) c2,    ifnull(max(case when abs((g1200-1)*20-g60)=1 then bitmap else null end),0) c1    from (        SELECT             CEIL(id / 60) g60,            CEIL(id / 1200) g1200,            umc_sex grouped,            COUNT(*) total,            BIT_OR(1 << (if(MOD(id, 60)=0,60,MOD(id, 60)))) bitmap        FROM            o_huaxiang_big_0 o        GROUP BY g1200 , g60 , umc_sex    ) v1 group by  g1200,grouped) v2;  insert into bitmap20_0 select   'o_huaxiang_big' table_name,  'age' column_name,    ((g1200-1)*60)*20 min_id,    ((g1200-1)*60)*20+1200 max_id,  v2.*from (    select     g1200,    grouped,    sum(total) total,     ifnull(max(case when abs((g1200-1)*20-g60)=20 then bitmap else null end),0) c20,    ifnull(max(case when abs((g1200-1)*20-g60)=19 then bitmap else null end),0) c19,    ifnull(max(case when abs((g1200-1)*20-g60)=18 then bitmap else null end),0) c18,    ifnull(max(case when abs((g1200-1)*20-g60)=17 then bitmap else null end),0) c17,    ifnull(max(case when abs((g1200-1)*20-g60)=16 then bitmap else null end),0) c16,    ifnull(max(case when abs((g1200-1)*20-g60)=15 then bitmap else null end),0) c15,    ifnull(max(case when abs((g1200-1)*20-g60)=14 then bitmap else null end),0) c14,    ifnull(max(case when abs((g1200-1)*20-g60)=13 then bitmap else null end),0) c13,    ifnull(max(case when abs((g1200-1)*20-g60)=12 then bitmap else null end),0) c12,    ifnull(max(case when abs((g1200-1)*20-g60)=11 then bitmap else null end),0) c11,    ifnull(max(case when abs((g1200-1)*20-g60)=10 then bitmap else null end),0) c10,    ifnull(max(case when abs((g1200-1)*20-g60)=9 then bitmap else null end),0) c9,    ifnull(max(case when abs((g1200-1)*20-g60)=8 then bitmap else null end),0) c8,    ifnull(max(case when abs((g1200-1)*20-g60)=7 then bitmap else null end),0) c7,    ifnull(max(case when abs((g1200-1)*20-g60)=6 then bitmap else null end),0) c6,    ifnull(max(case when abs((g1200-1)*20-g60)=5 then bitmap else null end),0) c5,    ifnull(max(case when abs((g1200-1)*20-g60)=4 then bitmap else null end),0) c4,    ifnull(max(case when abs((g1200-1)*20-g60)=3 then bitmap else null end),0) c3,    ifnull(max(case when abs((g1200-1)*20-g60)=2 then bitmap else null end),0) c2,    ifnull(max(case when abs((g1200-1)*20-g60)=1 then bitmap else null end),0) c1    from (        SELECT             CEIL(id / 60) g60,            CEIL(id / 1200) g1200,            age grouped,            COUNT(*) total,            BIT_OR(1 << (if(MOD(id, 60)=0,60,MOD(id, 60)))) bitmap        FROM            o_huaxiang_big_0 o        GROUP BY g1200 , g60 , age    ) v1 group by  g1200,grouped) v2;

感谢各位的阅读!关于"如何使用MySQL位图索引解决用户画像问题"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

信息 位图 索引 用户 画像 问题 内容 更多 篇文章 不错 实用 不好 右边 性能 整体 文章 时候 看吧 知识 类型 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 按路径查找的方式找到当前数据库 翻墙无法连接到代理服务器 阿里云的服务器是新的吗 计算机网络技术是干撒的 濮阳市软件开发 英雄联盟开服务器 分销裂变软件开发 陕西时代网络技术服务咨询报价 兰州软件开发企业的现状 h3c服务器历史告警怎么查 天津有哪些好的软件开发公司 怎样培养我们网络安全意识 我的世界盾斧pvp服务器 网络技术利弊反方辩词 行云管家数据库 如何查看程序是否成功链接数据库 在服务器运行的情况下删除存档 王之逆袭怎么看服务器 网络安全前途怎么样 天府杯国际网络安全大赛什么级别 腾讯云服务器首次备案多长时间 通州区综合网络技术服务一体化 四川省公安厅网络安全处微博 怎样创建多人编辑的数据库 爬取豆瓣影评存入数据库 安卓服务器下载文件 服务器防爆破 重庆蚁众驾软件开发有限公司 王之逆袭怎么看服务器 检索数据库user表的所有记录
0