Рекомендуемое индексирование для таблицы с 50 миллионами строк запрашивается с использованием столбца CREATED_DATE и столбца USER_TYPE. - PullRequest
0 голосов
/ 22 июня 2019

Таблица Пользователи :

ID  PK INT
USER_TYPE VARCHAR(50) NOT NULL
CREATED_DATE DATETIME2(7) NOT NULL

У меня есть эта таблица с 50 миллионами строк, и это запросы с использованием следующего предложения where:

WHERE
    u.USER_TYPE= 'manager' 
    AND u.CREATED_DATE >= @StartDate
    AND u.CREATED_DATE < @EndDate

Чтобыло бы хорошей отправной точкой для индекса в этой таблице, чтобы оптимизировать для вышеупомянутого запроса, где предложение?

Ответы [ 3 ]

2 голосов
/ 22 июня 2019

Для этого запроса вы хотите составной индекс с двумя столбцами: (user_type, created_date).Порядок имеет значение, сначала вы хотите user_type из-за сравнения на равенство.

0 голосов
/ 22 июня 2019

Для любого запроса.Запустите запрос в SSMS с включенным «Включить фактический план выполнения».SSMS будет рекомендовать индекс, если он считает, что соответствующий индекс не существует.

0 голосов
/ 22 июня 2019

Вы будете хорошо подготовлены, создав таблицу с типами пользователей, имеющими произвольный INT ID и ссылающиеся на тип менеджера по ID, вместо того, чтобы иметь тип менеджера непосредственно в таблице пользователей. Это сузит данные таблицы, а также любой индекс, относящийся к типу пользователя.

CREATE TABLE user_type (
    id INT NOT NULL IDENTITY(1,1),
    description NVARCHAR(128) NOT NULL,
    CONSTRAINT pk_user_type PRIMARY KEY CLUSTERED(id)
);

CREATE TABLE users (
    id INT NOT NULL IDENTITY(1,1),
    user_type_id INT NOT NULL,
    created_date DATETIME2(7) NOT NULL,
    CONSTRAINT pk_users PRIMARY KEY CLUSTERED(id),
    CONSTRAINT fk_users_user_type FOREIGN KEY(user_type_id) REFERENCES user_type(id)
);

CREATE NONCLUSTERED INDEX
    ix_users_type_created
ON
    users (
        user_type_id,
        created_date
    );

Вы бы запрашивали, используя user_type ID, а не напрямую с текстом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...