проблема производительности в запросе выбора из одной таблицы - PullRequest
3 голосов
/ 16 марта 2010

У меня есть таблица, как показано ниже

dbo.UserLogs

-------------------------------------
Id | UserId |Date | Name| P1 | Dirty
-------------------------------------

Может быть несколько записей на один идентификатор пользователя [даже в миллионах]

У меня есть кластеризованный индекс в столбце Дата, и я очень часто запрашиваю эту таблицу во временных диапазонах. Столбец «Грязный» не имеет значения NULL и может принимать только 0 или 1, поэтому у меня нет индексов для «Грязный»

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

Я пробовал этот запрос - выберите отличный (UserId) из UserLogs, где Dirty = 1

У меня в общей сложности 10 миллионов записей, и это занимает около 10 минут, и я хочу, чтобы это работало намного быстрее, чем это.

[Я могу запросить эту таблицу в столбце даты менее чем за минуту.]

Любые комментарии / предложения приветствуются.

мой env 64bit, sybase15.0.3, Linux

Ответы [ 2 ]

2 голосов
/ 16 марта 2010

Мое предложение будет заключаться в том, чтобы уменьшить объем данных, которые необходимо запрашивать, «архивируя» записи журнала в архивную таблицу через подходящие интервалы.

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

1 голос
/ 16 марта 2010

Добавить индекс, содержащий поля UserId и Dirty.Поместите UserId перед Dirty в индексе, так как он имеет больше уникальных значений.

...