低选择性色谱柱的索引和替代方案

2023-11-27

可用于在低选择性列上选择记录的策略范围有哪些?

一个示例可能是订单表,多年来,您在其中建立了大量已完成的订单,但通常需要选择活动订单。订单可能会经历一个生命周期,例如下单、库存分配、从仓库挑选、发送给客户、开具发票和付款。订单还可能被取消、保留等。大多数记录最终将处于最终状态(例如已付款),但您可能经常需要选择(例如)已分配的订单。在这种情况下,顺序读取会很慢。

关于索引的类似问题
MySQL:低基数/选择性列=如何索引?
SQL 中索引很糟糕吗?
什么是索引以及如何使用它们来优化数据库中的查询?
定义索引:哪些列以及性能影响?
以及许多其他相关性逐渐减弱的因素。

我读过的方法(在 stackoverflow 和其他地方)包括

  • 使用位图索引
  • 使用部分索引 (create index x on t(c2) where c1='a')
  • 使用聚集索引?
  • 不要索引低选择性列,使用顺序读取
  • 将数据分区(例如,分成具有相同模式的多个表)
  • 使用补充表(例如active_customers(customer_id)

我当前的 DBMS 不支持上面列出的前三个选项,其余选项似乎有问题 - 还有其他常用的方法吗?

更新:我见过 - 为低选择性列建立索引,但仅选择高选择性值。


我同意无理的观点However分支。但关于此案,有一些事情需要了解。

这称为倾斜和倾斜杀死。这是部分索引的完美用途,您可以排除 95% 的已付发票,只对更有趣和更有选择性的统计数据建立索引。但你没有那个。您可以将所有行水平分区到单独的表/分区中,但随后您需要考虑行迁移(从一种状态移动到另一种状态),这是昂贵的。 DBMS 必须执行更新、删除和插入来更改状态。如果你的系统容量很大,那会很糟糕。

忘记您所说的是否基于选择性建立索引,因为将索引放在快速变化的列上通常也是一个坏主意。您的索引将包含热块,其中所有步骤 1 都将被删除,另一个热块将所有步骤 2 都插入其中,顺便说一句,某些步骤 2 将同时被删除到步骤 3 中。这不会很好地扩展。

我建议将您的状态垂直分区到单独的表中。

您的发票表将包含 PK 和除状态之外的所有列。

您可以通过两种方式处理您的状态。该表将包含返回到发票表的 FK 的 PK 值、状态以及您进入该状态时的时间戳。最好的是关于状态的水平分区表。您将为每种可能的状态都有一个分区。因此,找到所有或一个“已放置”状态将对分区进行修剪并仅读取它需要的分区 - 这是非常少量的块。由于该行非常窄,因此您可能会在一个块上获得 400 个发票状态。由于 PK 上有一个全局索引,因此查找任何一张发票的状态都很容易。

如果您的 RDBMS 不支持行迁移分区,您需要将这些分区作为表进行管理,并从一个分区中删除并插入到另一个分区中。您将把这些移动封装在过程的事务中,以便保持数据干净。每张发票都位于一个且仅有一个状态表中。更困难的部分是通过发票 ID 进行查询,您必须检查每个表以了解它在哪里。

你还有另一个选择您可以写付费状态,也可以不写。如果它是分区表,则当发票转为已付款状态时,您只需从发票状态表中删除发票即可。 (当然,您将向奖励材料中提到的历史表写入付费记录)。然后,您将对状态表进行外连接,空值表示已付款。如果您几乎从不查询付费状态,那么确实没有理由进行快速查询。

奖励材料

无论哪种情况,您都需要在报告表中跟踪这些变动。每次更新状态时,您都需要将其写入历史表。最终你会想要分析我所说的运输时间。从填补到付款的平均时间是多少(按月计算)?这是由于经济不景气而增加的吗?从放置到装满的运输时间是多少(按月)。夏季是否会因为假期失踪而需要更长的时间?你明白了。通过更新该列,您将丢失这些答案,因此您需要将该历史记录嵌入到您的过程中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

低选择性色谱柱的索引和替代方案 的相关文章

  • SQL 选择与带有通配符的 URL 匹配的行

    我在数据库中有一个表 其中一列包含一个 URL 例如http example com users http example com users 轮廓 我得到了一个 URL 例如http example com users 234 profi
  • 为什么 SQL Server 不推荐使用 SET ANSI_PADDING OFF?

    根据 MSDN BOL 在线书籍 SET ANSI PADDING http msdn microsoft com en us library ms187403 aspx 在 Microsoft SQL Server 的未来版本中 ANSI
  • django pyodbc 数据源名称未找到

    当尝试连接到我的数据库服务器和 Django 中的数据库时 我收到错误 django db utils InterfaceError IM002 IM002 Microsoft ODBC Driver Manager 未找到数据源名称且未指
  • 如何获取共同好友列表

    你好 我想知道如何才能找到共同的朋友 我目前在思考这个问题时遇到问题 我有一个名为 users 的表 它是这样的 id name 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8
  • MySQL 中有“connect by”替代方案吗?

    如果我使用 Oracle 有connect by可用于创建分层查询的关键字 目前我正在一个项目中使用MySQL 我想知道是否有替代方案connect by在 MySQL 中 我尝试过谷歌 但到目前为止还没有结果 我想要实现的是通过一个查询从
  • Postgres 上的 C 语言环境和 Posix 语言环境有什么区别?

    我知道 Postgres 上的数据库区域设置负责国家字符的正确顺序 正确的小写 大写等 但为什么有两种语言中立的语言环境 posix and c 它们之间有什么区别 还是只是一个中立的语言环境有两个不同的名称 UPDATE正如 Magnus
  • 如何手动设置auto_increment的下一个值?

    我手动向表中添加了一些行 并且还手动设置了 ID 自动增量 现在 当我尝试通过我的应用程序将新行添加到数据库表中时 我收到错误 创建的 ID 值已存在 如何手动设置下一个ID值 例如 在表中我必须有ID 那么如何告诉PostgreSQL 下
  • max()、分组依据和排序依据

    我有以下 SQL 语句 SELECT t client id max t points AS max FROM sessions GROUP BY t client id 它只是列出了客户 ID 以及他们所获得的最大积分 现在我想按 max
  • 如何使用 Alter Table 在 Access 中创建小数字段?

    我想以编程方式在 MS Access 表中创建一个新列 我尝试过很多排列ALTER TABLE MyTable Add MyField DECIMAL 9 4 NULL 并得到 字段定义中的语法错误 我可以轻松创建一个数字字段Double类
  • 日常 MySQL(部分和过滤)复制的最佳实践?

    我有一个相当大的数据库 有超过 40 个表 我只需要复制几个表 5 并且每个表也被过滤 我正在寻找一些复制这些数据的最佳实践 每天就足够了 我可以只选择几个表并为每个表包含一些 WHERE 子句 我正在考虑为每个表启动 mysqldump
  • xQuery LIKE 运算符?

    有没有办法以与 SQL 相同的方式使用 XQuery 执行 LIKE 操作 我不想构造一些 startswith endswith 和 contains 表达式 我想要实现的目标的示例 for x in user where x first
  • MySQL解释更新

    作为我大学复习的一部分 我试图回答以下问题 至少在表的一个属性上创建索引 employees 数据库 您可以在其中使用 MySQL EXPLAIN 工具 清楚地显示好处 在条款或检索方面 和负面 在 更新条款 创建相关索引的信息 对于第一部
  • 如何在oracle中获取表作为输出参数

    我正在尝试将 Oracle 过程调用的 out 参数强制转换为对象 它不起作用 因为 据我了解 我需要定义一个映射 它告诉方法如何转换它 如果地图为空或未正确填充 则它默认为 STRUCT 类型的对象 在我的情况下这是错误的 我已经构建了一
  • 删除前导零

    给定列中的数据 如下所示 00001 00 00026 00 我需要使用 SQL 删除空格后面的所有内容以及值中的所有前导零 以便最终输出为 1 26 我怎样才能最好地做到这一点 顺便说一句 我正在使用 DB2 这已在 DB2 for Li
  • VIEW for 表结合 UNION ALL 的 MySQL 性能

    假设我有 2 张桌子MySQL create table persons id bigint unsigned not null auto increment first name varchar 64 surname varchar 64
  • 在bigquery中比较两个表的有效方法

    我有兴趣比较两个表是否包含相同的数据 我可以这样做 standardSQL SELECT key1 key2 FROM SELECT table1 key1 table1 key2 table1 column1 table2 column1
  • 了解涉及 3 个或更多表时 JOIN 的工作原理。 [SQL]

    我想知道是否有人可以帮助我提高对 SQL 中 JOIN 的理解 如果它对问题很重要 我会特别考虑 MS SQL Server 取 3 个表 A B A 通过某些 A AId 与 B 相关 和 C B 通过某些 B BId 与 C 相关 如果
  • 使用显式值进行 BigQuery 合并

    据我所知 BigQuery 支持合并两个表 目前 INSERT操作允许将显式值插入表中 例如 INSERT dataset Inventory product quantity VALUES top load washer 10 front
  • jDBI中如何进行内查询?

    我怎样才能在 jDBI 中执行这样的事情 SqlQuery select id from foo where name in
  • SQL Server 标识列值从 0 而不是 1 开始

    我遇到了一个奇怪的情况 数据库中的某些表的 ID 从 0 开始 即使 TABLE CREATE 的 IDENTITY 1 1 也是如此 对于某些表来说是这样 但对于其他表则不然 它一直有效到今天 我尝试过重置身份列 DBCC CHECKID

随机推荐

  • Pipenv 无法识别 Pyenv 版本?

    我安装了 Python 3 7 0 但对于特定的 Django 项目 我想使用 Python 3 6 5 使用pyenv为此 我在 Macbook Pro 上运行了brew install pyenv 其次是pyenv install 3
  • 从父级导航嵌入的 Google Apps 脚本 iFrame

    我有一个多页网络应用程序 我希望登录后 用户可以看到他的队友列表并标记他们的出勤状态 我的问题是我无法在 iFrame 中显示这一点 而不是在 google 脚本原始框架中显示这一点 例如 我想将其 iFrame 到我自己的网页上 这两天我
  • 使用 ASP.NET MVC 2 上传文件的最佳方式是什么?

    上传可变大小的文件 对于 ASP NET MVC 2 应用程序文件系统来说非常大或非常小 的最佳方法是什么 到目前为止我的理解是这样的 人们似乎有两种处理这个问题的方法 假设文件可能非常大或非常小 1 在控制器操作中处理上传Request
  • jQuery:同一事件有多个处理程序

    如果我将两个事件处理程序绑定到同一元素的同一事件 会发生什么情况 例如 var elem elem click elem click 最后一个处理程序 获胜 还是两个处理程序都会运行 两个处理程序都将运行 jQuery 事件模型允许在一个元
  • Angular 4:日期管道,UTC 时间到本地时间:如何告诉 Angular 当前时区?

    我们将 Angular 4 与用 net core 编写的 MVC 应用程序一起使用 使用 SignalR 服务接收数据 集线器是用 C 编写的 数据库提供 Datetime2 7 字段 T SQL 收到的内容如下所示 对于日期字段 due
  • SQL FileStream + Entity Framework 存储大文件

    当我想将文件存储在文件流列中时 我总是需要将整个二进制文件读入内存 using MemoryStream memoryStream new MemoryStream sourceStream CopyTo memoryStream bina
  • 在 PHP 中解析 javascript 数组

    我似乎不知道如何将 JS 数组放入 PHP 中 我必须处理的事情看起来像这样 var arrLow e 495864 rank 8678591 rankmove p img src up php uStyle 144 UP 495864 e
  • “Create VIEW”必须是批处理中的唯一语句

    我有以下 SQL ALTER PROCEDURE dbo usp gettasks ID varchar 50 AS declare PDate Date WHILE DATEPART DW PDate 1 OR DATEPART DW P
  • 有没有办法从 C# 调用 RDTSC 汇编指令?

    我想要为我的 C 应用程序提供一个非常高分辨率的计时器 我想访问 RDTSC 汇编指令 有没有办法做到这一点 编辑 我正在移植一些 C 代码并尝试保留与原始代码相同的功能 我可能会切换到更 NET 的东西 但想要评估 RDTSC 指令 以便
  • 下一个js图像组件错误“url”参数有效但上游响应无效

    我正在从 tmdb api 获取数据 但是图像未加载 所以我在新选项卡中打开图像 然后它显示 url 参数有效 但上游响应无效那么如何解决这个问题 您是否已将图像的域添加到下一个配置中 下面是一个例子 next config js modu
  • 使用 AngularJS 和 Asp.Net MVC 通过 FormData 上传多个文件

    我想使用 Angular js 上传多个文件 为此我使用 FormData 这是我的表单字段
  • 是否可以更改虚拟内存页面大小?

    是否可以更改虚拟内存页面大小 我问这个是因为在维基百科上 MMU 文章的 X86 64 部分 它讨论了不同的页面大小 如果页面大小确实可以改变 那么如何改变呢 在 x86 64 上 您可以在以下命令的帮助下显式请求 2 MiB 页面 而不是
  • 如何在 App Engine Nodejs Standard 上访问内存缓存

    如何从node js标准环境访问memcached 该文档显然没有提到 App Engine 内存缓存可用于 Node JS 标准环境 至少目前没有 没有Node JS语言选项卡中内存缓存概述 page s 没有Caching Applic
  • NumPy 读取文件并动态过滤行

    我在 CSV 文件中写入了大量数字 只需加载该数组的一部分 从概念上讲我想打电话np genfromtxt 然后对结果数组进行行切片 但是 该文件太大 RAM 可能无法容纳 相关行的数量可能很小 因此不需要解析每一行 MATLAB有函数te
  • EXTENDS 挑战:预处理器函数宏和类类 oop

    背景 我一直在使用 C 预处理器来管理和 编译 具有多个文件和构建目标的半大型 JavaScript 项目 这提供了对 C 预处理器指令的完全访问 例如 include define ifdef等来自 javascript 的内容 这是一个
  • 使用 Xcode 8 创建通用框架?

    我公司的 iOS 框架旨在在真正的 iOS 设备上运行 所述框架当前作为 Xcode 项目中的附加目标生成 该项目也生成应用程序 这使得调试框架相对容易 我们最近收到了要求让它在模拟器中也能运行的请求 我现在可以让它这样做 下一步是创建一个
  • 使用 Python MoviePY 连接视频太慢

    我正在使用 MoviePY 加入 50 多个或更多 1 2 3 分钟的视频 但它只给了我 20 个小时 尽管我有 64 GB 内存 i7 和 GTX 670 虽然不是顶级但还算合理 无论如何我可以加快这个过程吗 padding 10 pad
  • 解释 dumpsys cpuinfo

    我正在寻找 android shell 中命令 dumpsys cpuinfo 结果的解释 dumpsys cpuinfo Load 17 78 16 97 16 29 CPU usage from 35983ms to 21604ms a
  • 跨多个页面保留提供程序数据不起作用

    我在用着Provider在我的 flutter 应用程序中 当我进入新页面时 提供给Provider第 1 页的内容无法在第 2 页中访问 我所理解的方式Provider有效的一点是 有一个中心位置可以存储所有数据 并且可以在应用程序中的任
  • 低选择性色谱柱的索引和替代方案

    可用于在低选择性列上选择记录的策略范围有哪些 一个示例可能是订单表 多年来 您在其中建立了大量已完成的订单 但通常需要选择活动订单 订单可能会经历一个生命周期 例如下单 库存分配 从仓库挑选 发送给客户 开具发票和付款 订单还可能被取消 保