Проблема производительности, связанная с использованием предложения WHERE - PullRequest
0 голосов
/ 24 апреля 2011

Я столкнулся с проблемой, связанной с оператором SQL, который извлекает данные из таблицы с именем News в соответствии с категорией: Новости: Id (PK) int, Строка заголовка, Строка темы, Uid int, Cid int.

SELECT Id, Subject, Uid, Title FROM News WHERE Uid = @Uid

Этот оператор работает медленно по сравнению с оператором без WHERE, так как он должен идти и проверять каждую строку, чтобы убедиться, что он выполняет условие.

Итак, представьте себе таблицу новостей с 10000000 статей. Что мне делать с такой вещью?

Ответы [ 4 ]

4 голосов
/ 24 апреля 2011

Если столбец Id является первичным ключом, который может быть уже кластеризован (они по умолчанию), вам просто нужно создать некластеризованный индекс для столбца Uid - особенно для столбца Uid - это данные уникального идентификатора (GUID) типа.

Это можно создать, запустив следующий SQL:

СОЗДАТЬ НЕКЛАСТЕРНЫЙ ИНДЕКС IX_News_Uid ON Новости ( Uid )

1 голос
/ 24 апреля 2011

Вы должны создать индекс для столбца Uid, с Id, Subject и Title в качестве включенных столбцов.

Таким образом, база данных может выполнить запрос, используя только индекс,и вообще не должен касаться стола.

0 голосов
/ 24 апреля 2011

Я бы создал уникальный индекс для Uid.

0 голосов
/ 24 апреля 2011

Вы должны могли бы создать кластеризованный индекс для столбца Uid.Это должно улучшить производительность.Примечание. В одной таблице может быть только один столбец кластеризованного индекса.

...