При использовании нескольких операторов JOIN в запросе старайтесь располагать соединения, уменьшающие количество записей в таблице, в начале.
Например если требуется отобрать остатки товаров по определенной группе, JOIN к таблице остатков следует применить последним, например:

 

SELECT SKU.Code, SKU.Description, S.Qty
FROM Catalog_SKU SKU
JOIN Catalog_SKUGroup G ON G.Id = SKU.Owner
JOIN Catalog_SKU_Stocks S ON S.SKU = SKU.Id AND S.Stock = @StockId
WHERE G.Manager = @ManagerId

 

Данный запрос будет работать на порядок быстрее следующего:

SELECT SKU.Code, SKU.Description, S.Qty
FROM Catalog_SKU SKU
JOIN Catalog_SKU_Stocks S ON S.SKU = SKU.Id
JOIN Catalog_SKUGroup G ON G.Id = SKU.Owner
WHERE G.Manager = @ManagerId AND S.Stock = @StockId
Причина в том что во втором запросе Sqlite сначала объединит тяжелую таблицу остатков со всей номенклатурой и лишь затем отфильтрует результат.
В первом случае объединение будет происходить с гораздо меньшим количеством записей. 
  • Нет меток
Написать комментарий...