ЧРЕЗВЫЧАЙНО низкая производительность запросов LINQ при использовании Skip/Take для пейджингаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 ЧРЕЗВЫЧАЙНО низкая производительность запросов LINQ при использовании Skip/Take для пейджинга

Сообщение Anonymous »

Мне нужно запросить записи из базы данных DB2 с помощью LINQ. У меня есть объекты, созданные на основе схемы БД, и я пытаюсь выполнить запрос LINQ с помощью Skip and Take. Базовая таблица содержит около 25 столбцов и, возможно, миллион записей. Когда я выполняю запрос без «Skip()», его выполнение занимает примерно 0,508 миллисекунды. Когда я включаю Skip(), это занимает около 30 секунд. Большая разница.

Может кто-нибудь сказать мне, почему это происходит?

ОБНОВЛЕНИЕ: > Вот запрос LINQ, который я использую.

var x = 30;

var results = context.ASSET_T
.OrderBy(c => c.ASSET_ID)
.Skip(x)
.Take(x)
.ToList();


ОБНОВЛЕНИЕ: Я только что попробовал обновить запрос, чтобы возвращать только один столбец, ASSET_ID. Когда я возвращаю только один столбец, запрос С Skip() занимает всего 0,256 миллисекунды.

var x = 30;

var results = context.ASSET_T
.OrderBy(c => c.ASSET_ID)
.Skip(x)
.Take(x)
.Select(c => c.ASSET_ID)
.ToList();


Если я включаю какие-либо дополнительные столбцы, время выполнения запроса увеличивается ЗНАЧИТЕЛЬНО.

Например, выполнение запроса ниже занимает 10 секунд.

var x = 30;

var results = context.ASSET_T
.OrderBy(c => c.ASSET_ID)
.Skip(x)
.Take(x)
.Select(c => new {
ASSET_ID = c.ASSET_ID,
ASSET_TYP = c.ASSET_TYP
ASSET_DESC = c.ASSET_DESC
})
.ToList();


ОБНОВЛЕНИЕ: Я обнаружил, что существуют проблемы (возможно, связанные с индексом) со столбцами в таблице, которую я пытаюсь запросить. Как я упоминал выше, когда я выполняю запрос, который возвращает только столбец ASSET_ID, это занимает всего 0,256 миллисекунды. Если я попытаюсь выполнить запрос, который ONLY возвращает ASSET_DESC, или запрос, который ONLY возвращает ASSET_TYP, тогда выполнение запроса время подскакивает примерно до 9 секунд.

Означает ли это, что эти другие столбцы в настоящее время не индексируются?

ОБНОВЛЕНИЕ:

ОБНОВЛЕНИЕ:

Означает ли это, что эти другие столбцы в настоящее время не индексируются?

ОБНОВЛЕНИЕ:

Strong> Я добавил вывод SQL из приведенного выше запроса LINQ.

SELECT
Project1.C1 AS C1,
Project1.ASSET_ID AS ASSET_ID,
Project1.ASSET_TYP AS ASSET_TYP,
Project1.ASSET_DESC AS ASSET_DESC
FROM ( SELECT Project1.ASSET_ID AS ASSET_ID, Project1.ASSET_TYP AS ASSET_TYP, Project1.ASSET_DESC AS ASSET_DESC, Project1.C1 AS C1, row_number() OVER (ORDER BY Project1.ASSET_ID ASC, Project1.ASSET_TYP ASC, Project1.ASSET_DESC ASC) AS row_number
FROM ( SELECT
Extent1.ASSET_ID AS ASSET_ID,
Extent1.ASSET_TYP AS ASSET_TYP,
Extent1.ASSET_DESC AS ASSET_DESC,
CAST(1 AS int) AS C1
FROM MYDB.ASSET_T AS Extent1
) AS Project1
) AS Project1
WHERE Project1.row_number > 1
ORDER BY Project1.ASSET_ID ASC, Project1.ASSET_TYP ASC, Project1.ASSET_DESC ASC FETCH FIRST 31 ROWS ONLY


Подробнее здесь: https://stackoverflow.com/questions/199 ... for-paging
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Производительность Skip and Take в Linq to Objects
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Linq Paging с использованием Skip and Take возвращает неверный результат
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Получение COUNT и SKIP TAKE за одну операцию с помощью Linq to Entities
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Я пытаюсь разбить на страницы, используя подход Skip Take в коде Frist, но возникла ошибка
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Entity Framework Core: Skip Take Проблема производительности
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»