mysql - 记住我表索引

标签 mysql sql database indexing mariadb

我正在 MariaDB 中创建一个表来存储“记住我”-cookie 值:

CREATE TABLE u_remember_me (
    u_user_common_id INT UNSIGNED NOT NULL,
    lookup_key       VARCHAR(30) NOT NULL,
    token_hash       VARCHAR(30) NOT NULL,
    created          DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,

    INDEX (u_user_common_id),
    FOREIGN KEY (u_user_common_id) REFERENCES u_user_common (id) ON DELETE CASCADE ON UPDATE CASCADE,
    PRIMARY KEY (lookup_key),
    UNIQUE KEY (lookup_key, token_hash)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci ENGINE InnoDB;

我总是要通过lookup_key字段进行查找,因此选择它作为主键(随机字符串)。 u_user_common_id 列不能设置为主键,因为由于多个浏览器或计算机,用户可以分配多个(lookup_key,token_hash)。对于主键(性能、插入等?),lookup_key 是一个糟糕的选择吗?另外..我应该将主键设置为 (lookup_key, token_hash) 并删除 UNIQUE 约束吗?我选择不使用代理键的原因是因为它永远不会被使用,但我也不确定这是否是一个好的决定(无论如何我都需要对lookup_key进行索引)。

最佳答案

我认为你还没有弄清楚什么取决于什么。

lookup_key(随机字符串)是否与单个用户关联?如果是这样,PRIMARY KEY(lookup_key) 并删除 token_hash。

如果用户可以从不同的浏览器进行连接,并且您希望发生不同的情况,那么您就没有指定任何不同的数据。

关于mysql - 记住我表索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52410343/

相关文章:

c# - 在 C# 上执行查询时出错

mysql - 如何将所有表导出到单独的 sql 文件中

c# - 比较 C# DateTime 和 MySql 日期

php - 我怎样才能简化这个 mysql 查询?

php - 如何使用 password_verify() 从数据库中检索密码?

sql - 在不影响数据库的情况下测试存储过程

mysql - 数据库正在覆盖。来自 json 的最后一个条目写入数据库,所有其他条目都被覆盖。仅显示 Json 文件的最后一个条目

php - Mysql Php varios 表分页

mysql - 如何使用 MySql 使用一对多关系获取数据并在 MySql 中进行联接

python - 什么是低内存使用的良好数据库?