无论如何,我总是试图在表上有一个整数主键。但现在我在质疑这是否总是必要的。
假设我有一个产品表,每个产品都有一个全球唯一的SKU编号 - 这将是一个8-16个字符的字符串。为什么不把它变成PK呢?通常我会使这个字段成为一个唯一的索引但是然后有一个自动递增的int字段作为PK,因为我认为它会更快,更容易维护,并且允许我做一些事情,例如轻松添加最后5条记录。
但是在优化方面,假设我只是匹配全文字段而接下来正在进行文本匹配查询(例如像%%),你们可以想到任何不使用基于文本的主键的原因,大多数可能是varchar()类型?
干杯, imanc
答案 0 :(得分:6)
使用SKU编号作为主键有一定道理。您希望将其编入索引以快速进行SKU搜索。 SKU是natural index。
然而它有一些惩罚:
表演(如Coronatus所说)
缺乏设计灵活性。如果由于任何原因,SKU不再具有全局唯一性,您将不仅要更改表结构,还要更改所有查询。
更改一个项目的SKU将强制您更改数据库中的所有关系。
答案 1 :(得分:-2)
比较数字而不是字符串,计算机的速度要快得多。
此外,字符串的MySQL索引默认只包含前4个字母。
如果你有字符串blabfoo, blabbar, blabboo
,索引将完全无用,因为前4个字符是相等的,所以搜索“blabf”将初始匹配所有3个字符串,然后迭代结果。
基本上,永远不要为索引使用字符串,因为它们很慢并占用更多空间。