首页 > 数据库 >数据库重构(一):字段合并

数据库重构(一):字段合并

时间:2024-01-23 13:05:13浏览次数:32  
标签:重构 一个 系统 数据库 合并 字段 sql 优化 id

刚到公司不久,才知道公司产品在性能上有问题,数据量和并发数一大,系统就很慢,需要优化。在和公司技术同事讨论某模块优化,通过sql无法优化,因为系统sql是判断5个纬度,一个用户id, 一个机构id,一个岗位id, 还有级别判断和是否公共。

      刚到公司不久,才知道公司产品在性能上有问题,数据量和并发数一大,系统就很慢,需要优化。在和公司同事讨论某模块优化,通过sql无法优化,因为系统sql是判断5个纬度,一个用户id, 一个机构id,一个岗位id, 还有级别判断和是否公共。

      有5个”or“组成查询,表数据一大就表扫描,性能很差,但业务要求和系统要求这样判断。即使在表中这五个字段都建索引,速度也不会快。太多"OR"了,SQL Server 查询分析器无法优化。
 
    SQL语句这时无法优化了,但是如果重新设计表又对现有系统改变太大了,只有对表进行微调。

    讨论两天后,终于达成一致:
     
    1,将一个用户id, 一个机构id,一个岗位id,是否公共存四个字段合并成一个字段中,因为我们系统只记录一个,只要符合一个可以了。在再该字段建立索引,程序在前台传进个字符窜,包含上面四个,然后用in来匹配。
  
    这样重构,速度比以前要快,程序修改也比较少,是一个比较平衡的解决方法。但这不符合数据库的设计范式:一个字段有多个意义。设计数据库时不要使用,
只是在没办法优化的情况可以考虑。



标签:重构,一个,系统,数据库,合并,字段,sql,优化,id
From: https://blog.51cto.com/u_16532032/9376981

相关文章

  • MySQL数据库开发规范-EC
    最近一段时间一边在线上抓取SQL来优化,一边在整理这个开发规范,尽量减少新的问题SQL进入生产库。今天也是对公司的开发做了一次培训,PPT就不放上来了,里面有十来个生产SQL的案例。因为规范大部分还是具有通用性,所以也借鉴了像去哪儿和赶集的规范,但实际在撰写本文的过程中,每一条规范的背......
  • 历史SQL性能监控导致数据库出现大量latch free
    数据库版本:19.10RAC操作系统:redhat7.6最近收到数据库大量latchfree告警,结合最近后台同步数据以及地市访问较为频繁,起初认为是正常现象,可后来告警实在是频繁,登录数据库分析了下大概情况通过latchfree:P2值查看具体的latch名称--这里看到是real-timedescriptorlatch,之前没......
  • mysql数据库tpch测试总结
    版本8.0.33语句1:--usingdefaultsubstitutionsselect l_returnflag, l_linestatus, sum(l_quantity)assum_qty, sum(l_extendedprice)assum_base_price, sum(l_extendedprice*(1-l_discount))assum_disc_price, sum(l_extendedprice*(1-l_discount)*(1......
  • 【数据库】对大数据量数据集,PostgreSQL分组统计数量,限定每组最多数量
    一、背景介绍在处理大数据量数据集时,我们经常需要进行分组统计。例如,我们需要统计每个城市的人口数量、每个年龄段的人数等。在PostgreSQL中,我们可以使用row_number()函数结合over(partitionby)子句来实现这个功能。同时,为了限定每组最多数量,我们可以使用row_num<=100......
  • Kruskal 重构树学习笔记
    1.定义与构造对于一张无向图,新建\(n\)个树,原图每个点在一个树中,权值是\(0\)。按边权从小到大枚举边,如果这条边两个节点不在一棵树,合并两个节点所在的树。新建一个点,点权为加入边的边权,同时将两棵树的根节点分别设为新建点的左儿子和右儿子,将新建点设为根。实现与Kruskal最......
  • Ybt 金牌导航 6.1.F 大根堆 / BZOJ 4919 大根堆(LIS,启发式合并)
    题意简述有一个以\(1\)为根的有根树,每个点有权值\(v_i\)。你需要选出一个点集\(S\),使得点集里任意两个元素\(x,y\),若\(x\)在原树上是\(y\)的祖先,则要满足\(v_x>v_y\)。求选出的点集的最大大小是多少。解法原题限制相当于:在选出的点集构成的新树\(T\)中,每个点到根节......
  • 【数据库】对大数据量数据集,PostgreSQL分组统计数量,限定每组最多数量
    一、背景介绍在处理大数据量数据集时,我们经常需要进行分组统计。例如,我们需要统计每个城市的人口数量、每个年龄段的人数等。在PostgreSQL中,我们可以使用row_number()函数结合over(partitionby)子句来实现这个功能。同时,为了限定每组最多数量,我们可以使用row_num<=100......
  • 【数据库】对大数据量数据集,PostgreSQL分组统计数量,限定每组最多数量
    一、背景介绍在处理大数据量数据集时,我们经常需要进行分组统计。例如,我们需要统计每个城市的人口数量、每个年龄段的人数等。在PostgreSQL中,我们可以使用row_number()函数结合over(partitionby)子句来实现这个功能。同时,为了限定每组最多数量,我们可以使用row_num<=100......
  • 数据库学习笔记(四)—— MySQL 之 事务篇
    MySQL之事务篇事务事务是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。事务的四大特性(ACID):A原子性:原子性是指包含事务的操作要么全部执行......
  • 数据库学习笔记(三)—— MySQL 之 SELECT(查询)篇
    查询单表查询select分组函数,分组后的字段from表名[where条件][groupby分组的字段][having分组后的筛选][orderby排序列表];排序SELECT字段名FROM表名ORDERBY字段名[ASC|DESC];ASC表示升序,DESC表示降序,而ORDERBY默认值为ASC。多字段排......