如何获取大表的计数?

2024-03-16

样本表:

+----+-------+-------+-------+-------+-------+---------------+
| id | col1  | col2  | col3  | col4  | col5  | modifiedTime  |
+----+-------+-------+-------+-------+-------+---------------+
|  1 | temp1 | temp2 | temp3 | temp4 | temp5 | 1554459626708 |
+----+-------+-------+-------+-------+-------+---------------+ 

上表有5000万条记录

  1. (col1、col2、col3、col4、col5 这些是 VARCHAR 列)
  2. (id为PK)
  3. (修改时间)

每列都有索引

例如:我的网站中有两个选项卡。

FirstTab - 我使用以下条件打印上表的计数 [col1 如“value1%”,col2 如“value2%”]

SeocndTab - 我使用以下条件打印上表的计数 [col3 like“value3%”]


由于我有 5000 万条记录,因此按照这些标准进行计数需要很长时间才能得到结果。

注意:我有时会更改记录数据(表中的行)。插入新行。删除不需要的记录。

我需要一个可行的解决方案,而不是查询整个表。例如:就像缓存旧计数一样。这样的事有可能吗?


虽然我确信 MySQL 可以这样做,但这里有一个使用触发器的 Postgres 解决方案。

计数存储在另一个表中,每次插入/更新/删除时都有一个触发器检查新行是否满足条件,如果满足,则将计数加 1。触发器的另一部分检查旧行是否满足条件,如果满足,则减 1。

这是用于计算行数的触发器的基本代码temp2 = '5':

CREATE OR REPLACE FUNCTION updateCount() RETURNS TRIGGER AS 
$func$
BEGIN
   IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
      EXECUTE 'UPDATE someTableCount SET cnt = cnt + 1 WHERE 1 = (SELECT 1 FROM (VALUES($1.*)) x(id, temp1, temp2, temp3) WHERE x.temp2 = ''5'')'
      USING NEW;
   END IF;
   IF TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN
      EXECUTE 'UPDATE someTableCount SET cnt = cnt - 1 WHERE 1 = (SELECT 1 FROM (VALUES($1.*)) x(id, temp1, temp2, temp3) WHERE x.temp2 = ''5'')'
      USING OLD;
   END IF;
   RETURN new;
END
$func$ LANGUAGE plpgsql;

.

您当然可以修改触发器代码以具有动态 where 表达式并为表中的每个表达式存储计数,例如:

CREATE TABLE someTableCount
(
   whereExpr text,
   cnt INT
);

INSERT INTO someTableCount VALUES ('temp2 = ''5''', 0);

然后,您将在触发器中循环条件并进行相应更新。

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

如何获取大表的计数? 的相关文章

  • SQL Server - 选择满足条件的第一行

    我有 2 个包含 ID 的表 其中一个表中会有重复的 ID 我只想为表 B 中的每个匹配 ID 返回一行 例如 Table A objectIdA objectIdB 1 A 1 B 1 D 5 F Table B objectIdA 1
  • Rails 中 WHERE 子句中的 ALL 运算符

    关联关系如下图所示 InstructorStudent has many fees Fee belongs to instructor student 我想要获得在所有给定数组中具有每月详细信息的指导学生 如果其中任何一个中不存在每月详细信
  • 复杂的sql树行

    表结构 id message reply id 1 help me 0 434 love to 1 852 didn t work 434 0110 try this 852 2200 this wont 0 5465 done 0110
  • 重建数据库中的所有索引

    我有一个非常大的 SQL Server 2008 R2 数据库 1 5TB 并将在同一个表中的列之间复制一些数据 我被告知该架构有大量索引 并且想知道是否有默认查询或脚本可以重建所有索引 是否也被建议同时更新统计数据 30 个表中的每一个都
  • 删除、截断或删除以清理 MySQL 中的表

    我正在尝试清理表格 但没有摆脱表格的实际结构 我有一个id自动递增的列 我不需要保留ID号 但我确实需要它来保持其自动递增的特性 我发现了删除和截断 但我担心其中之一会完全删除整个表 从而使未来的插入命令变得无用 如何从表中删除所有记录以便
  • 限制分页页数

    objConnect mysql connect localhost root or die mysql error objDB mysql select db Test strSQL SELECT FROM UserAddedRecord
  • 如何修复“缺少表的 FROM 子句条目”错误

    我正在尝试根据游戏 ID 获取平台名称 我有如下三个表 我正在尝试加入它们以获得所需的结果 Games Id 1 2 3 4 Game Platforms Id game id platform id 1 1 1 2 1 2 3 3 3
  • 触发器与非规范化存储过程的优缺点

    当涉及到对事务数据库中的数据进行非规范化以提高性能时 至少 有三种不同的方法 通过存储过程推送更新 更新规范化交易数据和非规范化报告 分析数据 在事务表上实现更新辅助表的触发器 这几乎总是维护历史时所采取的路线 将处理推迟到夜间批处理 可能
  • Errno 121,写入或更新时出现重复密钥?

    SET OLD UNIQUE CHECKS UNIQUE CHECKS UNIQUE CHECKS 0 SET OLD FOREIGN KEY CHECKS FOREIGN KEY CHECKS FOREIGN KEY CHECKS 0 S
  • 使用php插入sql数据库时出错

    我有一个带有 MySQL 插入查询的程序 sql INSERT INTO people person id name username password email salt VALUES person id name username p
  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • postgresql中的按日期聚合函数分组

    我在运行此查询时遇到错误 SELECT date updated at count updated at as total count FROM persons WHERE persons updated at BETWEEN 2012 1
  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • 连接 3 三张表

    我有这个图表应该可以解释我的情况 我需要一些关于连接 3 个表的帮助 我不知道如何做这种事情 因此 我可以通过执行以下操作来经历一段检索记录的 while 循环 img src alt Album AlbumID 使用内部联接 http w
  • PHP:如何检查总数。 URL 中的参数?

    我正在使用 REQUEST 检索参数 有没有办法找到总数 URL 中的参数 而不是检索每个参数然后进行计数 这将为您提供总数 分隔的 URL 查询参数 count explode SERVER QUERY STRING 如果您只想要唯一的参
  • 如何避免连接两个表时重复

    Student Table SID Name 1 A 2 B 3 C Marks Table id mark subject 1 50 physics 2 40 biology 1 50 chemistry 3 30 mathematics
  • 如何正确设计数据库的这一部分(循环引用?)

    情况 一个公司有很多项目一个项目有很多标签一个项目只属于1家公司一个标签可以属于多个项目公司必须有权访问自己的标签 示例1 在第一张图片中 公司的所有标签都可以通过projects project tag 获得 但如果所有项目都被删除 那么
  • 要做或不做:将图像存储在数据库中[重复]

    这个问题在这里已经有答案了 在 Web 应用程序的上下文中 我的前老板总是说在数据库中放置对图像的引用 而不是图像本身 我倾向于同意在数据库中存储 url 与图像本身是一个好主意 但在我现在工作的地方 我们在数据库中存储大量图像 我能想到的
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3
  • 在 Django 查询中使用 .extra(select={...}) 引入的值上使用 .aggregate() ?

    我正在尝试计算玩家每周玩游戏的次数 如下所示 player game objects extra select week WEEK games game date aggregate count Count week 但姜戈抱怨说 Fiel

随机推荐

  • badref 是什么意思?

    IR线是什么意思 define i32
  • 加载时时区返回 Uncaught TypeError 的时刻

    我正在努力将 Moment Timezone 实现到 Django 应用程序中 以便纠正从不同时区访问它的用户 并且在通过 Require js 导入文件时遇到错误 moment js moment timezone js 和 moment
  • 如何在 coinbase api 中导入转换?

    目前 Coinbase 支持所谓的 转换 允许从一种货币转换为另一种货币 例如 您可以将部分 BTC 转换为 XRP 在 CSV 中 它们在备注字段中返回买入和卖出金额 笔记 将 0 27235696 BTC 转换为 3 731 32313
  • HTML 名称标签

    是否可以使用标签for元素的属性name代替id 我们的应用程序存在一个错误 两个复选框具有相同的 id 单击一个复选框的标签会检查另一个复选框 由于 HTML 生成逻辑丑陋且复杂 更改 id 会很痛苦 但是 这两个复选框都有唯一的名称属性
  • javascript 中的 Math.random 如何实现随机性?

    javascript 中的 Math random 如何实现随机性 我做了一个可以从大约 50 个不同选项中随机选择的东西 我想知道使用 Math random 来获得随机性应该有多舒服 从规格来看 随机的 返回一个正数数值 符号 大于或等
  • 在容器中心添加面板

    我有一个JPanel这是一个BorderLayout我在顶部和容器中设置了一个新面板 JDesktopPane 位于中心 另一个面板位于底部 现在我想在容器中心动态设置面板 卡片布局 因为我在下面显示层次结构 top gt panel pa
  • jQuery html() 和换行符

    我使用 jQuery 和 Rails 并有以下代码 related html 我在浏览器中遇到问题 只有当部分中没有换行符时 才会替换 lated 元素的内容 这没什么大不了的 我可以将所有内容放在一行上 但这使代码非常难以阅读 有没有办法
  • 使用重命名替换文件名

    我想通过替换从 开始的所有字符后跟八个大写字母来重命名文件名 并仅保留扩展名 4585 10 148 H2A119Ub GTCTGTCA S51 mcdf mdup ngsFlt fm 4585 10 148 H3K27me3 TCTTCA
  • 通过 chrome.runtime.sendMessage 发送带有函数的对象

    我正在开发一个 chrome 扩展 我想用 chrome runtime sendMessage 发送一个对象 带有一些函数 现在做这样的事情 chrome runtime sendMessage something Funny 工作得很好
  • wget 只下载一个 index.html 文件,而不是其他大约 500 个 html 文件

    使用 Wget 我通常只收到一个 index html 文件 我输入以下字符串 wget e robots 关闭 rhttp www korpora org kant aa03 http www korpora org kant aa03
  • 在 maven-plugin-testing-harness 中注入 DefaultRepositorySystem 时出错

    我正在尝试基于现有 2 0 插件创建一个新的 Maven 3 0 3 插件 并促进 aether 获取一些依赖项 我尝试创建一个简单的测试来使用 maven plugin testing harness 版本 2 0 1 加载 mojo 但
  • Chrome 扩展:无法使 chrome.desktopCapture.chooseDesktopMedia 捕获窗口音频

    我正在尝试使用chrome desktopCapture chooseDesktopMediaAPI 用于从扩展窗口捕获音频 我从 popup js 页面发送捕获请求 显现 background scripts background js
  • 哪里与有

    为什么需要放置您自己创建的列 例如select 1 as number after HAVING并不是WHERE在 MySQL 中 不这样做有什么缺点吗WHERE 1 写出整个定义而不是列名 其他关于这个问题的回答都没有说到重点 假设我们有
  • 如何告诉继承类不要调用其基类的无参数构造函数?

    我惊讶地发现我的基类的无参数构造函数在我每次调用时都会被调用any派生类中的构造函数 我以为就是这样 base 是为了 为了明确地如果需要的话 可以调用基本构造函数 当我实例化派生类时 如何防止调用基构造函数 using System na
  • 使用 PHP 在 Mongo DB 文档中添加数据

    我想插入数据Mongo database使用 PHP 脚本 在year明智的文件 使其看起来像这样 所有年份都在一份文件中 cars 2017 car Motorolla color blue 2016 car Toyota color g
  • 自动完成未按预期渲染材质 UI

    我的自动完成组件正在从 API 中提取书籍列表 我将它们呈现为自动完成组件中的选项 并将它们输出为页面底部的列表以进行调试 还从 API 输出 JSON 两个问题似乎是交织在一起的 首先 自动完成选项似乎并不全是渲染 最多有 10 个结果
  • FileNotFoundException(未找到 DLL)

    我在一台客户的机器上遇到了奇怪的错误 它抛出 FileNotFoundException 但该 DLL 肯定就在 Executable 文件夹中 为什么找不到它 请指教 由于您没有包含完整的异常详细信息 心理调试是 32 位与 64 位不匹
  • jQuery 验证文本区域最大长度错误

    我正在使用 jQuery validate v 1 6 0 来验证我的表单 我的数据库字段之一限制为 1000 个字符 我向相应的文本区域添加了验证 如下所示 在我的页面标题中 我添加 form validate validate 在我的页
  • 将 JSON ID 密钥插入 ng-click 指令,然后将其传递到另一个控制器

    应用程序的这一部分显示用户任务的最少信息 当他们单击 查看详细信息 按钮时 他们将进入一个页面 该页面包含有关基于 ID 的特定 CAR 的更多信息 这是一张图片来帮助解释我正在谈论的第一部分 这是我的角度代码 EDIT 添加了 ui ro
  • 如何获取大表的计数?

    样本表 id col1 col2 col3 col4 col5 modifiedTime 1 temp1 temp2 temp3 temp4 temp5 1554459626708 上表有5000万条记录 col1 col2 col3 co