SQL-запрос - необходимо повысить производительность

У меня есть сценарий загрузки данных, в котором я создаю динамический запрос sql для извлечения данных и кеширования в нашем сервисе. Есть 1 таблица который содержит все данные о продукте: ProductHistory (47 столбцов, 200 000 записей + и будет продолжать расти)

Что мне нужно: Получите последние продукты, используя максимальный идентификатор, максимальную версию и максимальный идентификатор изменения.

Первая попытка:

SELECT distinct Product.* FROM ProductHistory product 
WHERE  product.version = 
(SELECT max(version) from ProductHistory p2 where product.Id = p2.Id 
  and product.changeId = 
(SELECT max(changeid) from ProductHistory p3 where p2.changeId = p3.changeId))

Это заняло более 2,51 минуты.

Другая неудачная попытка:

select distinct product.* from ProductHistory product 
where CAST(CAST(id as nvarchar)+'0'+CAST(Version as nvarchar)+'0'+CAST(changeid as nvarchar) as decimal) = 
(select MAX(CAST(CAST(id as nvarchar)+'0'+CAST(Version as nvarchar)+'0'+CAST(changeid as nvarchar) as decimal)) from ProductHistory p2 
where product.Id = p2.Id)

В основном используется тот же принцип, что и при заказе дат, объединяя числа, упорядоченные по релевантности.

For example 11 Jun 2007 = 20070711
And in our case: Id = 4 , version = 127, changeid = 32   => 40127032
The zeros are there not to mix up the 3 different ids

Но это занимает 3,10 минуты !!! : (

Итак, мне в основном нужен способ улучшить мой запрос с первой попытки случайно. Я также задавался вопросом, с таким объемом данных, это лучшая скорость поиска, которую я должен ожидать?

  1. Я запустил sp_helpindex ProductHistory и обнаружил индексы, как показано ниже:

    PK_ProductHistoryNew - кластеризованный, уникальный, первичный ключ, расположенный на PRIMARY-Id, версия

  2. Я заключил первый запрос в SP, но все еще без изменений.

Итак, хотите знать, какими еще способами мы можем улучшить производительность этой операции?

Спасибо, Мани p.s: Я просто запускаю эти запросы в SQL Management stuido, чтобы узнать время.

6
задан OMG Ponies 4 September 2012 в 02:43
поделиться