SQL Server CE - плохая производительность - PullRequest
1 голос
/ 29 сентября 2011

Я занимаюсь разработкой приложения, использующего базу данных SQL Server CE, и у меня возникают проблемы с выполнением запросов.Например, простой запрос, который получает последний заказ клиента:

SELECT 
    Customer.Name, Orders.Amount AS LastOrderAmount
FROM   
    Customers
LEFT JOIN 
    Orders ON Orders.OrderId IN (SELECT TOP(1) OrderId
                                 FROM Orders 
                                 WHERE CustomerId = Customer.CustomerId 
                                 ORDER BY OrderNum DESC)

Этот запрос невероятно медленный.Всего 30 заказчиков и около 300 заказов на завершение работы занимает почти 10 секунд!

Я запрашиваю запрос, используя SqlCEDataAdapter.Я также пытался использовать SqlCeResultSet, но разница незначительна.Кроме того, у меня есть индекс на Orders.CustomerId (хотя его создание не имело большого значения).

Теперь я не ожидаю чудес от SQL Server CE, но это просто ужасно.Итак, что я могу сделать, чтобы улучшить производительность, или это ТОЛЬКО медленно?

1 Ответ

2 голосов
/ 29 сентября 2011

Попробуйте это:

SELECT cus.Name
     , outerOrd.Amount AS LastOrderAmount
  FROM Customers cus
  LEFT JOIN Orders outerOrd on outerOrd.CustomerId = cus.CustomerId
 WHERE not exists (SELECT *
                     FROM Orders innerOrd
                    WHERE innerOrd.CustomerId = cus.CustomerId
                      and innerOrd.OrderId > outerOrd.OrderId 
                  )

Отредактировано, вероятно, это лучше:

SELECT cus.Name
     , ord.Amount AS LastOrderAmount
  FROM Customers cus
  LEFT JOIN Orders ord on ord.CustomerId = cus.CustomerId
 WHERE ord.OrderId = (SELECT max(OrderId)
                        FROM Orders
                       WHERE CustomerId = cus.CustomerId
                     )
...