假设有数百万行 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
数据不断加载并进行大量更新。所以性能确实很重要。我的目标是:
使用唯一的键标签
&AA=
来标识每一行。基本上我需要从每一行获取标签&AA=
中的字符串。例如,我想要来自~~&AA=africa&~~
的africa
。None
如果没有&AA=
但仍需要读取每一行。识别
&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/