Каков наилучший способ поиска кода UPC в базе данных? - PullRequest
3 голосов
/ 30 ноября 2011

У меня есть база данных UPC с 12-значными штрих-кодами в формате UPC-A (1 900 000 записей). В настоящее время они хранятся как varchar (13) из-за ведущих нулей. Я использую SQL Server 2008 R2.

У меня также есть метод API WCF 4.0, который отправляет и запрашивает базу данных на основе совпадения штрих-кодов 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 ]

4 голосов
/ 01 декабря 2011

Я беру индекс для столбца штрих-кода как данность.

Вы можете сэкономить место, если сохраните коды в виде чисел. Пространство - это время, так как меньше байтов можно прочитать быстрее. Кроме того, поиск должен быть быстрее на числах. При необходимости можно восстановить начальные нули, поскольку UPC-A - это код фиксированной длины.

1 голос
/ 01 декабря 2011

Убедитесь, что в ваших критериях поиска sql нет функции, иначе ваш запрос не будет обработан.

Я бы предположил, что ваши чтения намного превосходят ваши записи, если данные являются чувственными без начальных нулей, я бы понес расходы на их усечение во время записи и поиск по точному значению. Кроме того, UPC-A - это только числовые данные. Я ожидал бы более производительного поиска по числовым данным, чем varchar, поскольку вы заявили, что пространство не является проблемой, поэтому вы можете даже хранить оба значения, если хотите.

Вам также нужен индекс для столбца.

1 голос
/ 01 декабря 2011

Я думаю, что хранить как varchar (12), вероятно, хорошо.Первое, что вы можете сделать, чтобы обеспечить выполнение запросов к штрих-коду, - убедиться, что у вас есть индекс для столбца штрих-кода.В зависимости от того, как вы используете данные, вы можете рассмотреть возможность создания кластерного индекса .

...