2013-03-18 3 views
1
SELECT TOP 10 dic.item_cd, 
       dic.item_knm, 
       dic.item_enm 
FROM tbus.dt_item_com dic 
INNER JOIN tbus.mfProd mfp ON dic.item_cd LIKE mfp.prodId 
INNER JOIN tbus.plu_category plc ON mfp.prodType LIKE plc.plc_prodType 
WHERE (dic.item_knm LIKE '%%' 
    OR (dic.item_enm LIKE '%%') 
    AND (dic.item_cd NOT IN 
     (SELECT TOP 0 dic.item_cd 
      FROM tbus.dt_item_com dic 
      INNER JOIN tbus.mfProd mfp ON dic.item_cd LIKE mfp.prodId 
      INNER JOIN tbus.plu_category plc ON mfp.prodType LIKE plc.plc_prodType 
      WHERE (dic.item_knm LIKE '%%' 
       OR dic.item_enm LIKE '%%') 
      ORDER BY dic.item_cd DESC)) 
ORDER BY dic.item_cd DESC 

Это SQL-запрос, который я пытаюсь оптимизировать.Оптимизация запроса SQL Server

Что это за запрос: Inner Соедините три таблицы по именам элементов (в настоящее время это просто «%%». Это будет что-то вроде «% apple%» позже »). И, потому что это для пейджинга, у него также нет синтаксиса IN.

Проблема в том, что есть два дублированных INNER JOIN & WHERE фразы - один внутри внутри НЕ IN, а другой снаружи. Как я могу удалить эти дублированные коды и сделать его быстрее :(

(Он основан на SQL Server 2000)

+0

какие индексы у вас – tomsv

+0

Это делает TOP 0 значит, что там с NOT IN ли.?? это особый смысл? Вы пытаетесь сделать пейджинг путем исключения? – usr

+0

dontamaso // К сожалению, индекса числа нет. Odering item_cd (код товара) будет способом их индексирования. – Raccoon

ответ

1

Позвольте мне ответить на другой вопрос (в соответствии с комментариями): Как сделать подкачку на SQL Server ? вы обычно используете функцию построчно номер:

select * from (
select *, row_number() over(order by something) r 
from T 
) x 
where r >= 10 and r < 20 

Тогда все ваши проблемы уходят

+0

Я знаю об этом решении ... но проблема все еще существует. Это не версия 2008 года :(К сожалению, Row_number() не поддерживается. – Raccoon

+0

Crap, я упустил тэг sql 2000. Не могу поверить, что этот продукт все еще используется ?! Во всяком случае, я не готов ответить тогда. Возможно, вам нужно просто подкачки «SQL Server 2000» Google. Все виды вещей появляются. – usr

+0

Нет, вам не нужно его удалять. Кто-то может найти это полезным :) – Raccoon

Смежные вопросы