在数据库中搜索UPC代码的最佳方法是什么?

时间:2011-11-30 19:44:51

标签: sql performance optimization barcode

我有一个12位UPC-A格式条码的UPC数据库(1,900,000条记录)。目前,由于前导零,它们被存储为varchar(13)。我正在使用SQL Server 2008 R2。

我还有一个WCF 4.0 API方法,它根据UPC-A条形码匹配查询数据库。

  • 提高基于UPC的查询效果的最佳方法是什么
  • 存储12位UPC-A条形码的最佳方法是什么。我的假设是使用varchar(12)好吗?

修改:更多信息

产品

  • ProductID (int)
  • 条形码(varchar(12))
  • 名称​​(varchar(50))
  • ImageUrl (varchar(255))

我的代码:

public JsonResult GetProductByCode(string code)
{
  DBEntities db = new DBEntities;

  Product product = (from prod in db.Products
                    where prod.Barcode == code
                    select prod).FirstOrDefault();

  return Json( product , JsonRequestBehavior.AllowGet );
}

3 个答案:

答案 0 :(得分:4)

我在条形码列上作为给定的索引。

如果将代码存储为数字,则可以节省空间。空间是时间,因为可以更快地读取更少的字节。此外,查找应该更快数字。当需要时,可以重建前导零,因为UPC-A是固定长度的代码。

答案 1 :(得分:1)

我认为存储为varchar(12)可能很好。为确保条形码查询的性能,您可以做的第一件事是确保条形码列上有索引。根据您对数据的使用情况,您可以考虑将其设为clustered index

答案 2 :(得分:1)

确保您的sql搜索条件不包含函数,否则您的查询不可搜索。

我猜你的读数远远超过你的写入数,如果数据是没有前导零的,那么我会承担在写入时截断它们并搜索确切值的成本。此外,UPC-A是仅数字数据。我希望在数字数据上进行比varchar更高效的搜索,因为您声明空间不是问题,所以如果您愿意,您甚至可以存储两个值。

您还需要列上的索引。