2014-09-10 3 views
0

У меня есть таблица InvoicesSql Server Compact (SQLCE 4.0) Оптимизация GROUP BY Запрос

Структура Invoices

CREATE TABLE Invoices (
    Id    int NOT NULL IDENTITY (1, 1), 
    Depot   nvarchar(100) NOT NULL, 
    InvoiceNo  nvarchar(100) NOT NULL, 
    InvoiceDate  datetime NOT NULL, 
    Licencee   nvarchar(255) NOT NULL, 
    Outlet   nvarchar(1024) NOT NULL, 
    SerialNo   int NOT NULL, 
    ProductName  nvarchar(500) NOT NULL, 
    Size    int NOT NULL, 
    [Case]   int NOT NULL, 
    BeverageSegment nvarchar(100), 
    /* Keys */ 
    PRIMARY KEY (Id) 
) 
GO 

CREATE INDEX Invoices_BeverageSegment 
    ON Invoices 
    (BeverageSegment) 
GO 

CREATE INDEX Invoices_InvoiceId 
    ON Invoices 
    (InvoiceNo) 
GO 

Я должен запросить Всего продаж для конкретного Depot, для Product на Date , у меня около 1,35,850 в таблице, запрос занимает 47 минут.

У меня нет большого опыта в системе баз данных, я проверил Оптимизацию запросов для SqlCe, но ни один из них не помогает в этом состоянии.

Мой запрос:

SELECT 
    Depot, 
    InvoiceDate, 
    ProductName, 
    Size, 
    SUM([Case]) as Cases 
FROM Invoices 
GROUP BY 
    Depot, 
    InvoiceDate, 
    ProductName, 
    Size 
+0

Вы пробовали указатель на Depot, InvoiceDate? – ErikEJ

+1

@ErikEJ - комбинированный индекс на Depot и InvoiceDate? –

+0

Да, это то, что я имею в виду – ErikEJ

ответ

1

Создание нон кластерного индекса на все четыре столбцов Depot, InvoiceDate, ProductName, размер увеличит производительность.

Create NonClustered Index Index_Name 
    on 
    Invoices (Depot, InvoiceDate, ProductName, Size) 
Смежные вопросы