gpt4 book ai didi

mysql - 仅包含唯一字符串的专用 SQL 表

转载 作者:搜寻专家 更新时间:2023-10-30 20:43:21 25 4
gpt4 key购买 nike

我似乎无法在网络上找到任何人这样做的例子,所以我想知道是否有原因(或者我没有使用正确的搜索词)。甚至可能已经有一个我不知道的术语?

为了节省定期重复出现的字符串的数据库存储空间,我正在考虑创建一个名为 unique_string 的 MySQL 表。它只有两列:

  1. "id": INT : PRIMARY_KEY 索引
  2. “字符串”:varchar(255):唯一索引

然后,数据库中任何位置的任何其他表都可以使用 INT 列而不是 VARCHAR 列。例如,名为 browser 的 varchar 字段将改为名为 browser_unique_string_id 的 INT 字段。

我不会将它用于性能重要的任何事情。在这种情况下,我使用它来跟踪每个页面请求的详细信息(记录 Web 统计信息)和用户在 Intranet 上的操作的“审计试验”,但也可能用于其他事情。

我也知道 SELECT 查询会很复杂,所以我对此并不担心。我很可能会编写一些代码来生成查询以返回“真实”字符串数据。

想法?我觉得我可能在这里忽略了一些明显的东西。

谢谢!

最佳答案

我已将此结构用于类似的应用程序——跟踪 Web 日志的 URI。在这种情况下,数据库是 Oracle。

性能问题并非微不足道。随着数据库的增长,有数千万个 URI。因此,仅在 INSERT 期间识别正确的字符串是具有挑战性的。我们通过在 hadoop 中构建大部分更新逻辑来处理这个问题,因此数据库表本质上只是 hadoop 表的一个副本。

在常规数据库中,您可以通过建立索引来解决这个问题,正如您在问题中所建议的那样。而且,索引解决方案可以很好地满足您的可用内存。事实上,对于索引来说,这是一个相当退化的情况,因为您实际上只需要索引而不是基础表。我不知道 mysql 或 SQL Server 是否可以识别这一点,尽管列式数据库(例如 Vertica)应该可以。

SQL Server 还有另一种选择。如果将字符串声明为 VARCHAR(max),则它不会与其余数据存储在单独的数据页中。在全表扫描期间,如果列未在查询中被引用,则无需在内存中加载额外的页面。

关于mysql - 仅包含唯一字符串的专用 SQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10703579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com