Как построить индекс, который лучше всего подходит для этого SQL? - PullRequest
1 голос
/ 23 мая 2019

Я запрашиваю базу данных простым SQL, например:

SELECT DISTINCT label FROM Document WHERE folderId=123

Мне нужен лучший индекс для этого.

Есть два способа реализовать это.

(1) создать два индекса

CREATE INDEX .. ON Document (label)
CREATE INDEX .. ON Document (folderId)

(2) создать составной индекс:

CREATE INDEX .. ON Document (folderId, label)

Согласно реализации индекса базы данных. Какой метод является более разумным? Спасибо.

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Ваш второй индекс - составной индекс - является лучшим индексом для этого запроса:

SELECT DISTINCT label
FROM Document
WHERE folderId = 123;

Во-первых, индекс охватывает запрос, поэтому нет необходимости обращаться к страницам данных (в большинстве баз данных).

Индекс работает, потому что движок может искать записи с идентифицированным folderId. Информация о label может быть получена. Большинство баз данных также должны использовать индекс для извлечения различных меток.

0 голосов
/ 23 мая 2019

Ответ зависит также от используемых дБмс.Я не уверен, что все dbms поддерживают использование нескольких индексов.

Мне следует подумать, что комбинированный индекс (folderid, label) - лучшее решение в вашем случае, так как вы можете построить свой набор результатов толькоиспользуя данные индекса.Так что даже не нужно получать доступ к реальным данным.Это может быть даже стратегия добавления дополнительных столбцов в индекс, так что на запрос, который называется много, можно ответить только путем доступа к индексу.

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