使用INT与VARCHAR作为MySQL中的主键之间是否存在可衡量的性能差异?我想使用VARCHAR作为参考列表的主键(想想美国,国家代码),并且同事不会将INT AUTO_INCREMENT作为所有表的主键.
我的论点,详见这里,是INT和VARCHAR之间的性能差异可以忽略不计,因为每个INT外键引用将需要一个JOIN,使参考的意义上说,VARCHAR键则直接呈现的信息.
那么,有没有人有这个特定用例的经验以及与之相关的性能问题?
在数据保险库2.0中,一个哈希值用于处理业务密钥,并将此哈希值用作表的主键。链接表也使用哈希主键创建关系。
我的问题是散列基本上是随机的,查询优化器无法应用任何良好的估计,因为统计信息(当然)不适用于随机分布的数据。
因此,查询优化器在要经常排序的地方使用了奇怪的计划(因为它认为只有4行可以排序)。由于我肯定不是第一个处理sql server中的数据保险库的人,因此它如何可修复?
当查询优化器使用索引查找或联接运算符时,它会完全错过行估计,因此会选择荒谬的计划。
我必须使用连接提示和查询提示(例如(FORCE ORDER))来修饰它们,以从中获得任何好处。
常见的处理方法是什么?
data-vault ×1
hash ×1
innodb ×1
join ×1
myisam ×1
mysql ×1
performance ×1
primary-key ×1
random ×1
sql-server ×1