SQL - varchar与int的性能

时间:2013-12-13 05:43:31

标签: mysql sql sql-server database oracle

我的表格中包含primary key varchar数据类型。另一个表foreign keyvarchar数据类型。

我正在使用这对join数据类型生成varchar语句。虽然我处理的行数很少(比如雷行),但它需要60ms。但是当最终部署系统时,它将有大约数千行。

我阅读了Performance of string comparison vs int join in SQL,并得出结论:SQL查询的效果取决于DB及其正在处理的行数。

但是当我处理大量数据时,它会有多重要吗?

我应该在numbertable join中创建一个table数据类型的新列,以减少SQL查询所花费的时间?

4 个答案:

答案 0 :(得分:5)

您应该为您所代表的数据使用正确的数据类型 - 任何可疑的理论性能增益都是必须处理数据转换的开销的次要因素。

根据这个问题,真的不可能说出这是什么,但大多数情况都是显而易见的。在不明显的情况下,您的数据元素由一组数字表示,但您不会将其视为数字 - 例如,电话号码。

您正在处理这种情况的线索是:

  • 必须保留的前导零
  • 不对该元素执行算术运算。
  • 执行字符串操作:例如。 “采取最后四个字符”

如果是这种情况,那么您可能希望将“数字”存储为varchar。

答案 1 :(得分:3)

是的,你应该试一试。但在此之前,请创建一个db的测试版本,其中填充了您希望在生产中使用的数据级别,并且不仅在SELECT上运行一些测试,还在INSERT,UPDATE和DELETE上运行。然后创建一个带整数键的版本,并执行相同的测试。

数字键会更快,原因很简单,键的尺寸较小,但差异可能不明显。当你自己测试和测量差异时,不要盲目信任书籍。

(有一点需要记住:如果有时您需要从关系中获得的是您当前拥有的值作为其键,那么如果您只需引用外键就可以跳过整个表查找,则数据库的运行速度可能会大大提高在您的记录上。)

答案 2 :(得分:1)

  

我是否应该在表中创建一个带有数字数据类型的新列并加入表以减少SQL查询所花费的时间。?

如果您处于可以轻松更改数据库设计的位置,那么您的主键应该是整数。除非有一个很好的理由让FK作为varchar,否则它们也应该是整数。

如果您无法更改PK或FK字段,请确保它们已正确编入索引。这最终会成为瓶颈。

答案 3 :(得分:-1)

这对我来说听起来不对。它将使用更多空间导致更多读取等。那么varchar是聚簇索引键吗?如果是这样,表格会变得非常分散。