mysql - 处理随机 ID 存储

标签 mysql database indexing database-design architecture

假设我们有一个像 YouTube 这样的应用程序,我们希望以随机方式为视频分配 ID,以便用户无法迭代视频。例如。 https://www.youtube.com/watch?v=o4f5G9q_9O4

我搜索了这方面的解决方案,但到处都说非连续 id 会严重损害索引,并且使用递增 id 并公开它们是不安全的(我同意)。

这个 id 应该如何存储? id 不连续会损害索引吗?

PS:我使用 MySQL 来存储这些数据

最佳答案

随机字符串不必是主键。您可以有一个AUTO_INCRMENT主键,它用作其他表中的外键。此外,您还可以有一个 unique_id 列,其中包含您在 URL 中公开的随机字符串。这可以有一个唯一的索引,这将使查找高效。

这类似于用户表,其中您可能有一个连续的user_id,以及一个唯一的user_name列,用于登录、发送消息、显示帖子等

对于 unique_id 列,您最好使用哈希索引而不是 B 树索引。不幸的是,在 MySQL 中,这仅在 MEMORY 存储引擎中可用,在 InnoDBMyISAM 中不可用。

关于mysql - 处理随机 ID 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52213441/

相关文章:

javascript - 在每个 block 的 Handlebars 内部使用索引值

python - 根据从另一个数组中删除的项目从 Python 数组中删除项目

PHP - MYSQL 按日期对多个表排序

php - PDO 不绑定(bind)变量

sql - 练习数据库查询 (sql/tsql)

mysql - 迁移到 mysql 5.7 后查询速度极慢

mysql - Laravel API 的 mysql 查询未在 performance_schema.events_statements_summary_by_digest 中被跟踪

mysql - MySQL 触发器中的常量

php - 合并几个类似的重复 mysql SELECT 语句

c - indexx() Numerical Recipes (C) 索引排序算法奇怪地忽略前两个元素