Sql Select Query Performance - PullRequest
       13

Sql Select Query Performance

0 голосов
/ 06 января 2012

У меня следующий запрос, выполнение которого занимает почти 1 минуту.

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 секунд. Пожалуйста, предложите.

Ответы [ 2 ]

1 голос
/ 06 января 2012

Если это занимает 55 секунд на сервере, то теперь это делать с linq.Почему у вас нет индекса, потому что он вам нужен ....

Единственный другой вариант - перенастроить логику для фильтрации записей (используя индексированные столбцы), прежде чем вы начнете искать номер заказа.матч.

0 голосов
/ 06 января 2012

Одна из больших проблем с LINQ to SQL заключается в том, что вы очень слабо контролируете генерируемый SQL.

Поскольку вы используете объединение, а не объединение, это должен быть довольно простой SQL. Примерно так:

SELECT * 
FROM SOP10100
WHERE ORIGNUMB  = 'some number'
UNION
SELECT * 
FROM SOP30200
WHERE ORIGNUMB  = 'some number'

Вы можете использовать SQL Server Profiler, чтобы увидеть операторы SQL, которые запускаются для базы данных, чтобы увидеть, является ли SQL таким или чем-то более сложным. Затем вы можете запустить SQL, сгенерированный в SQL Server Management Stuido, и включить «Включить статистику клиента» и «Включить фактический план выполнения», чтобы увидеть, что именно вызывает проблему с производительностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...