如何在MySql中正确处理长键约束(超过3072)?

时间:2014-09-30 08:07:27

标签: mysql sql database database-design

我可以看到在这个问题上有类似的问题和答案。 我需要在7列上一起创建一个唯一约束。

alter table ga_data_model add constraint uq_1234596 unique (portal_id,date,dimension,country,os,os_version,theme);

使用前缀键来解决此问题已有各种答案。但是,由于我的数据的性质,仅使用前一个或两个字符来创建索引是危险的,因为这可能导致重复的结果。所以这样的解决方案对我来说不起作用:


alter table ga_data_model add constraint uq_1234596 unique (portal_id,date(2),dimension(2),country(1),os(2),os_version(1),theme(2));

我正在考虑在我的表中创建一个包含这些列的计算哈希的新列,并在此创建约束。但这意味着每次我想在db中插入一些内容时,我都需要先为这个列做一个select,计算新值的哈希值,比较它们并保存/不保存。考虑到我将进行大量的写操作,我认为这有点太贵了。

有没有人遇到同样的问题并且有更好的解决方案,如上所述? 谢谢!

1 个答案:

答案 0 :(得分:0)

  

我想在db中插入一些东西,我需要先为这个列做一个select,计算新值的哈希值,比较它们并保存/不保存

否 - 您保存它,如果您获得了唯一的密钥违规,那么您已经拥有了数据。此外,将哈希计算实现为表触发器 - 这样就没有后门来修改数据。