返回顶部
首页 > 资讯 > 数据库 >如何使用MySQL位图索引解决用户画像问题
  • 587
分享到

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

2024-04-02 19:04:59 587人浏览 八月长安
摘要

这篇文章给大家分享的是有关如何使用Mysql位图索引解决用户画像问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。每个bigint类型包括60个记录的位信息.但是第0位表示第六十

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

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

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

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

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

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

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

经过王工的改良,

使用如下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位图索引解决用户画像问题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

您可能感兴趣的文档:

--结束END--

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

本文链接: https://lsjlt.com/news/63244.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用MySQL位图索引解决用户画像问题
    这篇文章给大家分享的是有关如何使用MySQL位图索引解决用户画像问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。每个bigint类型包括60个记录的位信息.但是第0位表示第六十...
    99+
    2024-04-02
  • MySQL位图索引如何解决用户画像问题
    这篇文章主要介绍了MySQL位图索引如何解决用户画像问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。用户画像的原始表,有一亿记录,100多...
    99+
    2024-04-02
  • 如何解析MySQL索引问题
    今天就跟大家聊聊有关如何解析MySQL索引问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。0 前言这篇文章不会讲解索引的基础知识,主要是关于MyS...
    99+
    2024-04-02
  • 如何使用PHP索引对象解决LeetCode算法问题?
    LeetCode算法问题是很多程序员都会遇到的挑战,而使用PHP索引对象是解决这些问题的一种有效方法。在本文中,我们将探讨如何使用PHP索引对象来解决LeetCode算法问题,并提供一些相关的演示代码。 一、PHP索引对象介绍 PHP索引对...
    99+
    2023-09-01
    索引 对象 leetcode
  • 如何解决mysql删除用户的bug问题
    这篇文章将为大家详细讲解有关如何解决mysql删除用户的bug问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。删除了user的用户之后 无法再次创造相同的用户名在mysql 数据库中有一张user表,可...
    99+
    2023-06-14
  • 如何使用mysql索引
    这篇文章主要为大家展示了如何使用mysql索引,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。什么是索引:索引可以帮助快速查找数据而基本上索引都要求唯一(有些不...
    99+
    2024-04-02
  • mysql索引如何使用
    小编给大家分享一下mysql索引如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、索引是什么1.索引简介索引其实是以文件...
    99+
    2024-04-02
  • MySQL如何使用索引
    这篇文章给大家分享的是有关MySQL如何使用索引的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。MYSQL的事务配置项 innodb_flush_log_at_trx...
    99+
    2024-04-02
  • 如何解决MySQL中一个双引号的错位问题
    这篇文章主要讲解了“如何解决MySQL中一个双引号的错位问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决MySQL中一个双引号的错位问题”吧!&n...
    99+
    2024-04-02
  • 如何解决MySQL中因一个双引号错位引发的问题
    小编给大家分享一下如何解决MySQL中因一个双引号错位引发的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言最近经常碰...
    99+
    2024-04-02
  • 如何解决MySQL批量插入和唯一索引问题
    这篇文章主要介绍了如何解决MySQL批量插入和唯一索引问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MySQL批量插入问题在开发项目时,...
    99+
    2024-04-02
  • MySQL索引如何创建和使用索引
    创建MySQL索引可以通过以下两种方式: 使用CREATE INDEX语句创建索引: CREATE INDEX index_na...
    99+
    2024-03-06
    MySQL
  • MySQL中如何使用索引
    这篇文章给大家介绍MySQL中如何使用索引,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。mysql采用b+树的方式存储索引信息。b+树结构如下:说一下b+树的几个特点:叶子节点(最下面...
    99+
    2024-04-02
  • 如何解决pycharm中用matplotlib画图不显示中文的问题
    前言: 其实很简单!举一个简单的例子! 这是一个简单的显示时刻的温度折线图: from matplotlib import pyplot as plt, font_manager i...
    99+
    2024-04-02
  • Mysql如何使用索引排序
    在mysql中使用索引排序的方法首先,在命令行中启动MySQL服务;service mysql start  MySQL服务启动后,在命令行中输入mysql的用户名和密码登录到MySQL;mysql -u root -p登录到MySQL后,...
    99+
    2024-04-02
  • Mysql覆盖索引如何使用
    在MySQL中,覆盖索引是指索引包含了查询需要的所有字段,这样MySQL可以直接使用索引来返回查询结果,而不需要再去访问数据表。这可...
    99+
    2024-04-09
    mysql
  • 如何解决MySql整型索引和字符串索引失效或隐式转换问题
    这篇文章主要为大家展示了“如何解决MySql整型索引和字符串索引失效或隐式转换问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决MySql整型索引和字符串索引失效或隐式转换问题”这篇文章...
    99+
    2023-06-25
  • AJAX支持搜索引擎问题该如何解决
    这篇文章将为大家详细讲解有关AJAX支持搜索引擎问题该如何解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 随便GOOGLE...
    99+
    2024-04-02
  • Percona 5.5如何定位未使用的索引
    这篇文章主要为大家展示了“Percona 5.5如何定位未使用的索引”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Percona 5.5如何定位未使用的索引”这...
    99+
    2024-04-02
  • 解决mysql删除用户 bug的问题
    作者在使用mysql添加用户的时候,发现用户名给我写错了 强迫症的我,必须要改过来,但是发现删除用户的时候,命令是成功的 但是在此创建同名用户的时候,会报错,网上查了很多,说这是mysql的官方bug,不知道是作者水...
    99+
    2022-05-23
    mysql 删除用户
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作