在大型表中强制执行varchar唯一性的最有效方法

时间:2012-09-10 17:23:51

标签: mysql sql

我有一个MySQL数据库应该包含大约5000万到1亿条记录。

我的表格字段为:TABLE_ID (INT), TABLE_STRING (VARCHAR 255), TABLE_BOOL (INT)

TABLE_ID是我的主键,但我需要确保TABLE_STRING对于表格中的所有行保持唯一。

我应该将TABLE_STRING设置为索引并使用我的脚本使用SELECT来检查字符串是否已经存在,还是应该将TABLE_STRING设置为我的表设置中的唯一?

有没有其他方法可以实现这一目标?如果不是上述哪一个更好?

谢谢,

2 个答案:

答案 0 :(得分:1)

如果您没有空间问题,那么您可以轻松地为TABLE_STRING字段添加唯一索引。

这将为该字段创建一个唯一索引,如果您尝试添加重复数据(插入/更新操作),它将提醒您。

由于您有大量的行,而且字段为VARCHAR(255),因此索引文件非常大。

如果你确实对空间有疑虑,那么你可能想放弃TABLE_ID并使用TABLE_STRING作为主键(这将是唯一的)。

我个人只会在TABLE_STRING字段中添加唯一索引。

请注意,如果您已经拥有该字段具有重复内容的行,则添加索引的操作最初可能会失败。一个好的做法是首先检查该字段中是否有任何重复数据。

HTH

答案 1 :(得分:0)

如前所述,您应该在UNIQUE上创建TABLE_STRING索引。您还应该研究分区,因为它将通过在每个分区中包含本地索引来提高索引的性能。