2011-11-30 2 views
3

12 자리 UPC-A 형식 바코드 (1,900,000 레코드)의 UPC 데이터베이스가 있습니다. 현재 그들은 선행 제로로 인해 varchar (13)로 저장됩니다. SQL Server 2008 R2를 사용하고 있습니다.데이터베이스에서 UPC 코드를 검색하는 가장 좋은 방법은 무엇입니까?

또한 UPC-A 바코드 일치를 기반으로 데이터베이스를 쿼리하고 쿼리하는 WCF 4.0 API 메서드가 있습니다.

  • 는 UPC를 기반으로 쿼리를 12 자리 UPC-A 바코드를 저장하는 가장 좋은 방법은 무엇
  • 의 성능을 향상시킬 수있는 가장 좋은 방법은 무엇입니까. 내 가정은 varchar (12)를 사용합니까?

편집 : 추가 정보

제품

  • 제품 ID (INT)
  • 바코드 (VARCHAR (12))
  • 이름 (VARCHAR (50))
  • 이미지 URL (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); 
} 
+0

지금하고있는 것을 Google에 보여주지 않으면 성능 향상을 제안하기가 어렵습니다. :) 또한, "거대한"을 정의하십시오. –

+0

@KenWhite 정보가 있습니다. –

+0

... 예. ** 어떤 ** 쿼리 **가 실행되고 있습니까? – Matthew

답변

4

는 I는 주어진 바코드 열에 인덱스를 가지고.

코드를 숫자로 저장하면 공간을 절약 할 수 있습니다. 공간은 더 적은 바이트가 더 빨리 읽을 수 있기 때문에 시간입니다. 또한 숫자에 대한 조회가 더 빨라야합니다. UPC-A는 고정 길이 코드이므로 필요한 경우 앞에 오는 0을 재구성 할 수 있습니다.

+3

여기에는 공간이 없습니다. 그것은 단지 1입니다.9M 행을 지원하며 고정 너비이기 때문에 문자를 사용하는 것보다 더 많은 오버 헤드 여백을 사용하고 표시 목적으로 변환합니다. 또한 검색하기 전에 사용자가 입력 한 바코드 (문자열)를 숫자로 변환하고 다시 오버 헤드를 추가해야합니다. –

+5

하지만 수치 검색은 속도가 빠르기 때문에 전반적인 순 이득이되어야합니다. – Randy

+0

@Ken 스페이스는 항상 문제입니다. UPC 코드에서 색인의 실제 크기를 나누면 3 차 캐시 또는 RAM에있는 색인의 필요한 부분 사이를 결정할 수 있습니다. 캐시 계층의 함의를 이해하고 있습니까? –

1

아마도 varchar (12)로 저장하는 것이 좋습니다. 바코드 쿼리의 성능을 보장하기 위해 할 수있는 일은 바코드 열에 인덱스가 있는지 확인하는 것입니다. 데이터 사용에 따라 clustered index으로 지정하는 것이 좋습니다.

+0

글이 있으면 ** 클러스터 된 인덱스를 권장하지 않습니다 **. 이렇게하면 순차적 데이터를 INSERT하지 않기 때문에 전체 INSERT 행 테이블을 INSERT 할 때 다시 정렬해야합니다. – Matthew

+1

varchar 대신 char (12)를 사용합니다. 데이터가 항상 12 바이트 인 경우 필드 당 2 바이트의 오버 헤드가 필요하지 않습니다. 물론 2 바이트 밖에 안되지만 1.9M 행에 불과합니다.하지만 인덱스에도 포함되어 있습니다. 성능에 관심이 있으므로 모든 것이 중요합니다. –

+0

@MatthewPK : 귀하의 "전체 1 백 9 십만"부분에 동의하지 않습니다. 대부분의 삽입은 UPC가 클러스터 된 인덱스로 지정된 경우에도 데이터의 아주 작은 부분 만 재정렬 할 수 있습니다. 그러나 UPC에 클러스터 된 인덱스를 사용하는 것은 나에게 자극적이지만, "귀하의 데이터 사용에 따라 ..."에 의해 보호받는 성명서가 작성되었습니다. (데이터가 한 번로드되고 삽입/업데이트/삭제되지 않으며 전체 UPC에만 가능한 쿼리 유형이있는 경우 클러스터 된 인덱스를 사용하는 것이 좋습니다.) – Codism

1

SQL 검색 조건에 함수가 포함되어 있지 않은지 확인하십시오. 그렇지 않으면 쿼리가 실행되지 않습니다.

필자가 작성한 것보다 읽기가 훨씬 많습니다. 데이터가 선행 0없이 센세이셔널 한 것이라면 필자는 쓰기 시간에 잘라내어 정확한 값을 검색하는 데 드는 비용이들 것입니다. 또한 UPC-A는 숫자 전용 데이터입니다. 당신이 원한다면 값을 모두 값으로 저장할 수 있기 때문에 공간이 문제가되지 않는다고 말한 것처럼 숫자 데이터에 대한 더 나은 검색 결과가 varchar보다 많을 것으로 기대합니다.

또한 색인에 색인이 필요합니다.

관련 문제