mysql - SQL : should I insert another column or parse every single row

标签 mysql sql regex postgresql text-processing

假设有数百万行 SQL 格式的流量数据。 对于给定范围的每一行,我想从 URL 列中获取与目标标记匹配的子字符串文本。

例如,在 URL 列中,我有以下文本:

Column: `URL`
Row 1: http://www.google.com/abcdeft?&QQ=123&AA=america&YY=111
Row 2: http://www.google.com/abcdeft?&QQ=123&AA=asia&YY=111
Row 3: http://www.google.com/abcdeft?&QQ=123&AA=africa&YY=111
Row 4: http://www.google.com/abcdeft?&QQ=123&AA=south&YY=111
Row 5: http://www.google.com/abcdeft?&QQ=123&AA=south&YY=111
Row 6: http://www.google.com/abcdeft?&QQ=123&AA=&YY=111
Row 7: http://www.google.com/abcdeft?&QQ=123
...
Row 99999999: http://www.google.com/abcdeft?&QQ=123&AA=ddd&YY=111

数据不断加载并进行大量更新。所以性能确实很重要。我的目标是:

  1. 使用唯一的键标签 &AA= 来标识每一行。基本上我需要从每一行获取标签 &AA= 中的字符串。例如,我想要来自 ~~&AA=africa&~~africaNone 如果没有 &AA= 但仍需要读取每一行。

  2. 识别 &AA= 中包含相同标记的重复行。例如第 4 行和第 5 行是重复的,因为它们具有相同的 south AA 标记。

问题: future 数据处理的最佳方式是什么?

选项 1。没有 URL

  • 读取 URL 列中的每一行
  • 使用 urlparse 库解析标记 &AA= 的每一行
  • 需要一个单独的脚本来查找具有相同 AA 标记的重复行。例如使用Python,我需要创建所有项目(所有标签)的列表并找到列表中的重复项目。
  • 需要单独的查询来查找包含重复标签的行。例如查询 URL
  • 列中包含重复项的行
  • 专门为此任务创建单独的列似乎相对可行

选项 2。为标签 &AA= 插入另一个新列 AA,并在更新流量数据时开始填写新列。

这样:

  • 无需阅读URL
  • 无需解析URL中的文本即可获取标签&AA=
  • 无需从一个查询中查找重复项 - 无需从另一个查询中检索包含重复项的行

这样,我们就可以轻松地:

  • 只需选择AA列即可获取&AA=数据
  • SELECT 在 SQL 中使用 COUNT 函数重复行

哪一个会表现更好?

最佳答案

如果您可以承受额外列的额外空间成本,那么这将是最佳方法。如果 AA 有很多重复项,您可能会考虑将其放入另一个表中,然后加入到该表中进行查询。这将减少空间成本,同时仍然为您提供所有灵 active 。如果您查询 ID 而不是 AA 的文本值,它会变得更加容易(查询速度更快)。

关于mysql - SQL : should I insert another column or parse every single row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24254282/

相关文章:

java - Tomcat 中的 mysql-connector 异常行为

MySQL LIMIT 0,15 其中 15 是 parent_ids 的数量,不是 child

java - 使用 JDBC 获取 MySQL 查询的状态消息(包括执行时间)

php - 连接和搜索具有一对多关系的多个 MySQL 表

mysql - 组织一个 MySQL 表结构以有效地索引对

javascript - 返回对象的 ID 为零(在数据库中创建记录)

mysql - 在 GROUP BY 中使用 LIMIT 来获得每组 N 个结果?

javascript - 正则表达式使用 javascript 验证 csv 格式的文本字段

c# - 如何使用正则表达式和/或 linq 解析游戏日志?

java - 如何使用 Java 正则表达式匹配 'ERA-00924' 和第一个 '<' 字符之间的所有内容?