SQL中的状态列的Varchar(10)或int

时间:2014-09-08 05:51:43

标签: sql sql-server database

从搜索/速度角度创建一个列类型更好的表格?

对于某些表,我需要一个名为Status的列。我通常将此int32存储在数据库中,然后使用类在我的代码中引用它:

 public static int Published = 1;
 public static int Draft = 0;
 public static int Deleted = -1;

将此列用作varchar代替是否存在很大的速度差异?

 public static string Published = "Published";
 public static string Draft = "Draft";
 public static string Deleted = "Deleted";

我更喜欢第二个varchar方法,因为它有助于数据库中的可读性,然后我不必经常将int状态代码转换为供人类使用的字符串。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

作为最佳实践,您应该选择最窄的列。列越窄,SQL Server必须存储的数据量越少,SQL Server能够读取和写入数据的速度就越快。此外,如果在列上创建任何索引,索引大小将更窄,因此整体性能将受到积极影响。 由于您的列设计为仅包含数字,因此请使用数字数据类型,例如INTEGER,而不是VARCHARCHAR数据类型。数字数据类型需要较少的空间来保存与字符数据类型相同的数值。这有助于减小列的大小,并且可以在搜索列(WHERE子句),连接到另一列或排序时提高性能。

此外,如果要将列中的值存储为数字-1,1到10,则TINYINT数据类型更适合INT数据类型。

希望这会有所帮助!!