Index und Abfrage müssen zusammen passen. Eine Abfrage die für eine Tabelle zugleich mehrere Indexe nutzt, ist in der Regel ineffektiv. Von der Laufzeit ist "In" meist sehr teuer.
Ich würde die Abfrage von Oben im Prinzip so umstellen (hab grad kein MS-
SQL):
SQL-Code:
CREATE INDEX IDX_Brand_ProductLine ON [inventory].[dbo].[inventory.inv_test] (ALL_Brand, ALL_ProductLine);
select SUM(PLC_Lower25 * ALL_AvailableStock) as PLC_Lower25,
SUM(PLC_25 * ALL_AvailableStock) as PLC_25,
SUM(PLC_30 * ALL_AvailableStock) as PLC_30,
SUM(PLC_40 * ALL_AvailableStock) as PLC_40,
SUM(PLC_50_55 * ALL_AvailableStock) as PLC_50_55,
SUM(PLC_60 * ALL_AvailableStock) as PLC_60,
SUM(PLC_70 * ALL_AvailableStock) as PLC_70,
SUM(PLC_TOTAL * ALL_AvailableStock) as PLC_Total
from
[inventory].[dbo].[fnSplit](@Brand, ';') a,
[inventory].[dbo].[fnSplit](@Productline, ';') b
left join MyView2 c on (c.ALL_Brand = a.Value) and (c.ALL_ProductLine = b.Value);
Hier wird eine Art Kreuztabelle aus den Werten aus "Brand" und "Produktline" erstellt.
Mit jeder Kombination erfolgt dann jeweils eine Abfrage der eigentlichen Datentabelle.
Durch den Index müssen dabei nur die Datensätze gelesen werden, die der jeweiligen Kombination entsprechen.
Sind nur zwei getrennte Indexe (einer über ALL_BRAND und ein anderer über ALL_ProductLine) vorhanden, ist die Abfrage um ein vielfaches langsamer.