у нас есть две связанные таблицы (инвентарь и инвентаризация) на Sql Server 2005.
скрипт первой таблицы.
CREATE TABLE [dbo].[inventory](
[code] [varchar](35) NOT NULL,
[salePrice1] [decimal](22, 2) NULL,
CONSTRAINT [PK_inventory] PRIMARY KEY CLUSTERED
(
[code] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
и второй;
CREATE TABLE [dbo].[inventoryLocalization](
[code] [varchar](35) NOT NULL,
[language] [varchar](2) NOT NULL,
[name] [nvarchar](100) NOT NULL,
[description] [nvarchar](max) NULL,
CONSTRAINT [PK_inventoryLocalization] PRIMARY KEY CLUSTERED
(
[code] ASC,
[language] ASC,
[name] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
А у нас запрос зависит от этих двух, следующим образом:
select i.[code],
iL.[language],
case
when iL.[name] is null then (select iL2.name from dbo.inventoryLocalization iL2 where iL2.[language] = 'de' and iL2.code = i.[code])
else iL.[name]
end as [name]
from dbo.inventory i
left join dbo.inventoryLocalization iL on i.code = iL.code and iL.[language] = 'en';
как вы уже догадались, мы выбираем все записи с [language] = 'en', но если для en нет записи, запрос принимает 'de' (по умолчанию).
Но этот запрос занимает гораздо больше времени (примерно 13 секунд).
Как вы думаете, какие-либо другие элегантные методы для того же результата позволяют сократить время, которое требуется?
Заранее благодарим за любую помощь, которую вы можете оказать.