При использовании нескольких операторов 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 сначала объединит тяжелую таблицу остатков со всей номенклатурой и лишь затем отфильтрует результат.
В первом случае объединение будет происходить с гораздо меньшим количеством записей.
Добавить комментарий