Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получение записей интервала / 7 сообщений из 7, страница 1 из 1
17.11.2021, 12:49
    #40112510
warren82
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение записей интервала
Добрый день!

Есть таблица с несколькими ключами (уникальный индекс по этим полям).

1. Как быстро получить Top 1000 ключей записей, начиная от некоторой записи?
2. Как быстро получить данные интервала?

По сути, 1 это получение верхней границы интервала в 1000 записей, начиная от нижней границы (если SELECT TOP 1000... обернуть в SELECT TOP 1() ORDER BY ...DESC).

Например, есть таблица Table1(Key1, Key2, Key3, Val1, Val2). Есть "границы" интервала:
(Key1=100, Key2='qwerty', Key3=124)
(Key1=100, Key2='asdfgh', Key3=356)

Сейчас запросы такие (работают очень нешустро):

1.
Код: sql
1.
2.
3.
4.
5.
SELECT TOP 1000
Key1, Key2, Key3
FROM Table1
WHERE (Key1 > 100 OR Key1 = 100 AND (Key2 > 'qwerty' OR Key2 = 'qwerty' AND (Key3 > 124)))
ORDER BY Key1, Key2, Key3



2.
Код: sql
1.
2.
3.
4.
5.
6.
SELECT
Key1, Key2, Key3, Val1, Val2
FROM Table1
WHERE (Key1 > 100 OR Key1 = 100 AND (Key2 > 'qwerty' OR Key2 = 'qwerty' AND (Key3 > 124)))
      AND NOT (Key1 > 100 OR Key1 = 100 AND (Key2 > 'asdfgh' OR Key2 = 'asdfgh' AND (Key3 > 356)))
ORDER BY Key1, Key2, Key3
...
Рейтинг: 0 / 0
17.11.2021, 13:02
    #40112515
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение записей интервала
...
Рейтинг: 0 / 0
17.11.2021, 13:31
    #40112535
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение записей интервала
warren82,

а с UNION не быстрее будет (избавившись от OR)
...
Рейтинг: 0 / 0
17.11.2021, 13:48
    #40112545
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение записей интервала
warren82

Сейчас запросы такие (работают очень нешустро)


покажите скрипт таблицы и всех индексов
+ указать размер таблицы

а вообще, если запрос тормозит, смотрят его актуальный план и анализируют проблемные части
...
Рейтинг: 0 / 0
17.11.2021, 14:11
    #40112556
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение записей интервала
warren82,

распишите все случаи OR в виде отдельных запросов.
...
Рейтинг: 0 / 0
17.11.2021, 16:27
    #40112613
warren82
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение записей интервала
aleks222,

Вы имеете в виду OFFSET-FETCH?

Меня скорее беспокоит второй запрос (от начальной границы до конечной). Здесь я не могу взять те же 1000 записей, потому что между 1 и 2 запросом записи в интервале могут удалиться/добавиться.
...
Рейтинг: 0 / 0
17.11.2021, 16:46
    #40112627
andy st
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение записей интервала
warren82,
а весь этот глум с and, or и not на between не заменить?
чтобы 2 запроса были согласованы по данным можно их делать в SNAPSHOT и двумя рекордсетами в одном батче/процедуре. и в одной транзакции
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получение записей интервала / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]