SQL:我应该插入另一列还是解析每一行

时间:2014-06-17 00:55:02

标签: 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=中获取字符串。例如,我希望来自africa的{​​{1}}。 ~~&AA=africa&~~如果没有None但仍需要阅读每一行。

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

  3. 问题:哪种方式是未来数据处理的最佳方式?

    选项1 。没有south

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

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

    这样:

    • 无需阅读专栏&AA=
    • 无需解析URL中的文字以获取代码URL
    • 无需从一个查询中查找重复的项目      - 无需从另一个查询中获取包含重复项目的行

    通过这种方式,我们可以轻松地:

    • 仅选择列&AA=
    • 即可获取&AA=个数据
    • AA使用SQL
    • 中的SELECT函数重复行

    哪一个表现更好?

1 个答案:

答案 0 :(得分:2)

如果您能够承受额外列的额外空间成本,那么这将是最佳方法。如果AA有很多重复项,您可以考虑将其放在另一个表中,然后加入它进行查询。这将减少空间成本,并仍然给你所有的灵活性。如果您查询ID而不是AA的文本值,它会使它更容易(查询更快)。