Как повысить производительность запроса на SQL Server с таблицей с 150 миллионами записей? - PullRequest
1 голос
/ 20 июня 2019

Как я могу улучшить свой запрос select в таблице с более чем 150 миллионами записей в SQL Server?Мне нужно выполнить простой выбор и получить результат в минимально возможное время.Должен ли я создать какой-то индекс?Таблица разделов?Что вы, ребята, рекомендуете для этого?

Вот мой текущий сценарий:

Таблица:

CREATE TABLE [dbo].[table_name]
(
    [id] [BIGINT] IDENTITY NOT NULL,
    [key] [VARCHAR](20) NOT NULL,
    [text_value] [TEXT] NOT NULL,

    CONSTRAINT [PK_table_name] 
        PRIMARY KEY CLUSTERED ([id] ASC)    
) 
GO

Выбор:

SELECT TOP 1 
    text_value 
FROM 
    table_name (NOLOCK) 
WHERE
    key = @Key

Дополнительная информация:

  1. В этой таблице не будет обновлений или удалений

  2. В столбце text_value есть Json, который будет извлечен при выборе иприложение будет обрабатывать эту информацию

  3. Никакие другие запросы к этой таблице не будут выполняться, только запрос выше, чтобы всегда извлекать text_value на основе key столбца

  4. Каждые 2 или 3 месяца в таблицу добавляется около 15 миллионов

1 Ответ

3 голосов
/ 20 июня 2019

Для этого запроса:

SELECT top 1 text_value FROM table_name (NOLOCK) where key = @Key

Я бы добавил следующий индекс:

CREATE INDEX idx ON table_name (key)
INCLUDE (text_value);

Поиск всегда будет в столбце key, так что будет формироваться структура индексаи вы хотите включить text_value, но не иметь его на страницах без листа.Это всегда должно приводить к поиску индекса без поиска ключа (индекс покрытия).

Кроме того, не используйте тип данных TEXT, так как он будет удален в будущей версии, вместо этого используйте VARCHAR (MAX).Ссылка: https://docs.microsoft.com/en-us/sql/t-sql/data-types/ntext-text-and-image-transact-sql?view=sql-server-2017

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