Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Влияние сортировки на select top 1 / 14 сообщений из 14, страница 1 из 1
09.04.2019, 16:15
    #39798879
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
Объясните, пожалуйста, непонятно, но интересно... жуть, сервер 2017

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE dbo.plog
(
	n decimal(15,0) NOT NULL,
...
	i decimal(15,0) NOT NULL identity(1,1),	
CONSTRAINT x_plog PRIMARY KEY NONCLUSTERED (n) 
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY)

(1) select top 1 * from plog (nolock) where n<2265380000 order by n
(2) select top 1 * from plog (nolock) where n>2265380000 order by n desc 
(3) select top 1 * from plog (nolock) where n<2265380000 order by n desc
(4) select top 1 * from plog (nolock) where n>2265380000 order by n


Есть ключ-индекс, и он используется при получении top 1, но только если выборка в том же порядке сортировки - запросы 1 и 4
В запросе 2 видим Top N Sort, а в 3 - вообще полную сортировку

Это абсолютно непонятно)
Вроде как везде в начале плана есть Поиск в индексе/Index Seek (кроме 3, ну там вообще всё как будто специально в назидание тем, кто пишет очень плохие запросы... так лучше забыть от 3 от греха)

Ну ок, поперед всего - нашли запись с нужным значением ключа
Теперь надо взять следующее или предыдущее

Но ведь сортировка то по возрастанию, вроде должно быть проще взять следующее, чем предыдущее
Но нет, (1) и (4) влет проходят
Хотя (1) надо взять предыдущее по ключу, а (4) вообще конец всей географии
Тогда как (2) нужно взять просто следующее по ключу, а там запускается TopN сортировка

Буду рад тыканьям в доку и прочие материалы со ссылками и т.п.
...
Рейтинг: 0 / 0
09.04.2019, 17:45
    #39798961
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
dklim.kznОбъясните, пожалуйста, непонятно, но интересноПотому что, в отличие от традиционных, range-индексы in-memory таблиц однонаправленные.
...
Рейтинг: 0 / 0
09.04.2019, 18:45
    #39799005
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
invm,

да это просто прекрасно
куда направленные то? я и полагаю, что вперед

значит, взять следующее - легко, а предыдущее, как в (1) - сложно

а мы тут видим категорически противоположную картину)))
...
Рейтинг: 0 / 0
09.04.2019, 18:46
    #39799007
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
ну я полагаю, что сначала по индексу ищем n=2265380000
а потом берем топ 1

но похоже как-то иначе всё)))
...
Рейтинг: 0 / 0
09.04.2019, 18:49
    #39799009
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
dklim.kznа предыдущее, как в (1) - сложно


Зачем при select top 1 * from plog (nolock) where n<2265380000 order by n брать предыдущее?

нужно взять вообще первую запись в индексе, и если n окажется <2265380000 - вывести
...
Рейтинг: 0 / 0
09.04.2019, 18:54
    #39799010
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
похоже меня уже глючит

Код: plaintext
1.
2.
3.
select top 1 * from plog with (nolock ) where n<2265380000 order by n
  |--Top(TOP EXPRESSION:((1)))
       |--Index Seek(OBJECT:([post].[dbo].[plog].[x_plog]), SEEK:([post].[dbo].[plog].[n] < (2265380000.)) ORDERED FORWARD)

он берет весь диапазон индекса по дереву и бродит там. делая TopN
но это же был бы scan, а не seek

явно же что ищет))
...
Рейтинг: 0 / 0
09.04.2019, 18:55
    #39799011
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
msLex
нужно взять вообще первую запись в индексе, и если n окажется <2265380000 - вывести

ну уж
а order by ?
...
Рейтинг: 0 / 0
09.04.2019, 18:56
    #39799012
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
dklim.kzn,

вот именно
...
Рейтинг: 0 / 0
09.04.2019, 18:57
    #39799013
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
dklim.kznну уж
а order by ?


top 1 order by n - это запись с минимальными n, т.е. первая в индексе
в where никаких ограничений на n "снизу" нет.
...
Рейтинг: 0 / 0
09.04.2019, 18:58
    #39799015
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
dklim.kznзначит, взять следующее - легко, а предыдущее, как в (1) - сложноВ (1) не предыдущее, а первое в порядке n, меньшее 2265380000. Разницу ощущаете?

И вообще, Index Scan в (1) от Index Seek в (4) отличаете?
...
Рейтинг: 0 / 0
09.04.2019, 19:01
    #39799016
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
dklim.kznон берет весь диапазон индекса по дереву и бродит там. делая TopN
но это же был бы scan, а не seek

Это не seek, это range scan от начала и до 2265380000, но Top(TOP EXPRESSION:((1))) прерывает его после первой же выданной записи
...
Рейтинг: 0 / 0
09.04.2019, 19:14
    #39799022
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
msLex
top 1 order by n - это запись с минимальными n, т.е. первая в индексе
в where никаких ограничений на n "снизу" нет.

спасибо
вот я бы влетел то... )))

но почему это топ то))))
по дереву если только

вот не попадалось на глаза раньше это прекрасное)))
...
Рейтинг: 0 / 0
09.04.2019, 19:39
    #39799032
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
dklim.kznmsLextop 1 order by n - это запись с минимальными n, т.е. первая в индексе
в where никаких ограничений на n "снизу" нет.

спасибо
вот я бы влетел то... )))

но почему это топ то))))
по дереву если только

вот не попадалось на глаза раньше это прекрасное)))

вы хотели спросить, почему это seek?

я уже ответил выше 21857662
...
Рейтинг: 0 / 0
09.04.2019, 21:08
    #39799039
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Влияние сортировки на select top 1
msLex,

нет-нет, я про топ

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

ну бывает на старуху проруха))
раньше только в выдаче использовал, да и давно не брал я в руки шашки

просто я знаю, чем такие простые вещи чреваты - кучей потерянного времени и долбежа об стенку)
так что ещё раз большое спасибо
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Влияние сортировки на select top 1 / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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