У меня есть следующий запрос, который занимает почти 1 минуту.Sql Select Query Performance
public static Func<Entities, string, IQueryable<string>> compiledInvoiceQuery =
CompiledQuery.Compile((Entities ctx, string orderNumb) =>
(from order in ctx.SOP10100
where order.ORIGNUMB == orderNumb
select order.SOPNUMBE).Union(
from order in ctx.SOP30200
where order.ORIGNUMB == orderNumb
select order.SOPNUMBE)
);
Он фильтрует на основе ORIGNUMB, который не является моим первичным ключом, я даже не могу помещать на него какой-либо индекс. Есть ли у нас какой-либо другой способ сделать это быстрее? Я тестировал на SQL сервере, и обнаружили, что только запрос
from order in ctx.SOP10100
where order.ORIGNUMB == orderNumb
select order.SOPNUMBE
или
select SOPNUMBE
from SOP10100
where ORIGNUMB = @orderNumb
занимает более 55 секунд. Пожалуйста, предложите.
Поскольку «ORIGNUMB» является единственным элементом ваших критериев выбора, нет никакой возможности индексировать этот столбец для повышения производительности. – dasblinkenlight
Если вы не можете создавать индексы, то, по-вашему, ваш единственный выбор - переписать запрос, возможно, быть более избирательным (но маловероятным без индекса). –
почему вы не можете его проиндексировать? – HLGEM