0

我使用的是 OLAP 系统,有些表有文本字段。文本长度可以从一些字节到KB,而一行中其他固定大小字段的大小仅为100字节左右。

我的一些表有数十亿行,文本字段的值是高度可重复的,我怎样才能减少这种冗余以节省存储空间并且不损失查询性能?

4

2 回答 2

1

冗余是数据库工作中的一个技术术语。这并不意味着“重复”。它的意思是“不必要的重复”。您可能没有任何不必要的重复;每个值都需要在自己的行中,以便向用户传达正确的含义。

有时,您可以用更短的、人类可读的代码替换现有值。更短的代码生成更窄的表,这意味着数据库中每页的行数更多,I/O 更快。例如,在美国,我们经常使用州的两个字母的邮政编码而不是州的全名。这几乎总是有效的。(这意味着人类无需进一步处理即可读取输出,并且查询运行速度至少要快一点。)

有时,您可以用代理键替换现有值,希望额外连接的成本会被更快的磁盘 I/O 所抵消。有时这种策略行不通;您需要测试并准备恢复到原始模式。

于 2012-04-09T11:37:03.740 回答
0

报告数据库中的 URL 之前给我带来了麻烦。可能值得尝试的是将 URL 拆分为 3 部分 - 主机名/端口、路径和查询字符串 - 您最终可能会得到一个 url-fragment 表(可能不止一个),以及一个带有 URL 的 FK 的 URL 表 -片段表。有时查询字符串不值得单独存储,在这种情况下,URL 表具有主机名和路径的 FK,并存储查询字符串。

另一个想法是删除查询字符串的无用部分 - 这个决定需要在逐个应用程序的基础上发生,但可以产生很大的不同 - 从 URL 中删除会话 ID 可以显着改善事情(此外,您可能可以删除谷歌分析参数。

此外,仅在需要时访问 URL 表,并确保至少对主机名有索引。

于 2012-04-23T02:18:17.913 回答