Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 min/max по индексу  [new]
зеленый админ
Member

Откуда:
Сообщений: 247
Есть таблица
CREATE TABLE [dbo].[test_ice] (
[id] int IDENTITY(1, 1) NOT NULL,
[id2] int NOT NULL)
ON [PRIMARY]
WITH (DATA_COMPRESSION = NONE);

уникальній индекс
CREATE UNIQUE NONCLUSTERED INDEX [ix_test_ice_id2_id]
ON [dbo].[test_ice]
([id2] , [id])
WITH
(
PAD_INDEX = OFF,
FILLFACTOR = 1,
IGNORE_DUP_KEY = OFF,
STATISTICS_NORECOMPUTE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON,
DATA_COMPRESSION = NONE
)
ON [PRIMARY];
GO


и запрос
select distinct t.id2, min(t.id) OVER(PARTITION BY id2) AS min_id
 from test_ice as t with (index (ix_test_ice_id2_id))


Есть ли в 2008R2 такой план, при котором был бы проход по индексу и поиск минимального?
9 авг 13, 17:17    [14688462]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
Glory
Member

Откуда:
Сообщений: 104751
А почему distinct, а не group by ?
9 авг 13, 17:21    [14688485]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
зеленый админ
Member

Откуда:
Сообщений: 247
Glory
А почему distinct, а не group by ?

Потому что,
1.
 select t.id2, min(t.id) OVER(PARTITION BY id2) AS min_id
 from test_ice as t with (index (ix_test_ice_id2_id))
 group by t.id2

Msg 8120, Level 16, State 1, Line 1
Column 'test_ice.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.


1.
 select t.id2, min(t.id) OVER(PARTITION BY id2) AS min_id
 from test_ice as t with (index (ix_test_ice_id2_id))
 group by t.id2, min(t.id) OVER(PARTITION BY id2)

Msg 4108, Level 15, State 1, Line 3
Windowed functions can only appear in the SELECT or ORDER BY clauses.
9 авг 13, 17:29    [14688558]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
Glory
Member

Откуда:
Сообщений: 104751
разве это не тоже самое, что

select t.id2, min(t.id)
from test_ice
group by t.id2
9 авг 13, 17:33    [14688594]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
зеленый админ
Member

Откуда:
Сообщений: 247
да, согласен, спасибо. Более того
select t.id2, min(t.id)
from test_ice as t  with (index (ix_test_ice_id2_id))
group by t.id2

выглядит план запроса таким, как нужно!
9 авг 13, 17:48    [14688735]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
erfgwerfewr
Guest
зеленый админ,

А что ты хотел от сервера

distinct t.id2, min(t.id) OVER(PARTITION BY id2) AS min_id

Он как не крути вконце будет делать sort distinct, так как у тебя колонка min_id известна только после вычисления, в индексе информации о нем нет. и это кстати, не то, что с group by...

В строго твоем примере (с логикой distinct) можно было только убрать ненужный table spool и прочую шелуху таким образом

distinct t.id2, FIRST_VALUE(t.id) OVER(PARTITION BY id2 ORDER BY ID) AS min_id

---
скажи спасибо Glory, что он умеет читать мысли
9 авг 13, 18:05    [14688849]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
erfgwerfewr
distinct t.id2, FIRST_VALUE(t.id) OVER(PARTITION BY id2 ORDER BY ID) AS min_id

зеленый админ
Есть ли в 2008R2 такой план, при котором был бы проход по индексу и поиск минимального?
9 авг 13, 18:17    [14688910]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
зеленый админ
distinct t.id2, min(t.id) OVER(PARTITION BY id2) AS min_id
erfgwerfewr
distinct t.id2, FIRST_VALUE(t.id) OVER(PARTITION BY id2 ORDER BY ID) AS min_id
Почесать ухо левой пяткой.
Но зачем?

erfgwerfewr
скажи спасибо Glory, что он умеет читать мысли
Вы о чём?
Явно ум за разум. Гуманитарный. У обоих.
10 авг 13, 00:00    [14690193]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Mnior,

никак на top ... with ties.... order by ....asc намекаете ?
12 авг 13, 11:07    [14695240]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Mnior
Вы о чём?
Явно ум за разум. Гуманитарный. У обоих.
Плиз ,если не жалко..просветите гуманитарев как сделать проще чем пример Glory
Потому как заставить его искать по индексу можно легко,добавими фейковый where по id2. Но Вы видимо ,подразумевали нечто другое ,если не жалко 1 минуты времени - покажите плиз
12 авг 13, 11:48    [14695540]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Maxx, а чего вы добиваетесь? По чеснаку.
12 авг 13, 19:09    [14698684]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Mnior
Maxx, а чего вы добиваетесь? По чеснаку.

я - если честно , то просто хотел увидеть чет реальное.. у нас же профессия вечный студент,и если кто-то обладает знаниями которых ты не знаеш,то и не зазорно спросить
Троллинга - нет по факту
13 авг 13, 11:38    [14700924]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Maxx
Mnior,
никак на top ... with ties.... order by ....asc намекаете ?
Это вы называете проще? Тоже ухо, с той же пяткой.
Maxx
Плиз ,если не жалко..просветите гуманитарев как сделать проще чем пример Glory
Что может быть проще обыкновенного GROUP BY?

Как вас надоумило задать эти вопросы? Мне интересно, честно.
Вот покажите этапы логических рассуждений, как из 14690193:
* distinct + OVER -> ухо пяткой
* group by -> элементарно
Вы вывели:
* top with ties -> круче
* group by -> не настолько круто
???

Maxx
просто хотел увидеть чет реальное.. у нас же профессия вечный студент,и если кто-то обладает знаниями которых ты не знаеш,то и не зазорно спросить
Самое главное у студента - критический взгляд ума.
Спрашивают не знания, а несостыковки (Знания сами формируются, из сопоставления). А что-то новое - выслушивают/высматривают.

Ссори за придирчивость к словам.

Maxx, рассуждения erfgwerfewr непонятны подходом:
Надо выпиливать (методом подбора) запрос до "эталонного" плана, при этом структура запроса сама по себе якобы совершенно неважна.

Структура плана - замечательно. Но язык важная часть. Его структурность не должна быть абы какая - это инструмент формализации стоящий на строгих понятиях.
Надо писать в первую очередь формально правильно, подбирая подходящую эквивалентную форму, а план контролирует что модель адекватная (модель предметной области, модель её реализации, модель компиляции, мат. моделей, модель языка, модель формализации) и исправляя, если что-то не так, если возможно.
13 авг 13, 15:42    [14703073]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Mnior
Как вас надоумило задать эти вопросы? Мне интересно, честно.
Вот покажите этапы логических рассуждений, как из 14690193:
* distinct + OVER -> ухо пяткой
* group by -> элементарно
Вы вывели:
* top with ties -> круче
* group by -> не настолько круто

Прикалываетесь да ? Я вообще спросил чем Вас не устроил вариант просто group by ,при етом добавив что поиск по идексу можно обеспечить добавиви фейковый where по id2.
В ответ очередной загон про гуманитариев и все такое,вместо нормального примера , без "пяток в ухо" и с лучшим планов и более дешевым.
Mnior
Структура плана - замечательно. Но язык важная часть. Его структурность не должна быть абы какая - это инструмент формализации стоящий на строгих понятиях.
Надо писать в первую очередь формально правильно, подбирая подходящую эквивалентную форму, а план контролирует что модель адекватная (модель предметной области, модель её реализации, модель компиляции, мат. моделей, модель языка, модель формализации) и исправляя, если что-то не так, если возможно.

Формально правильно и удобноваримо серверу ето агрегатная ф-ция +group by . Все остальное записываю как "гуманитарный стеб" , не более
Начало вы положили сами
Glory 14688594
Вы 14690193
13 авг 13, 15:52    [14703135]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Maxx
Я вообще спросил чем Вас не устроил вариант просто group by
Ну откуда вы взяли что меня он чем-то не устраивает? Уже который раз ...
Вы перестали пь вотку по утрам? ©

Mnior
erfgwerfewr
скажи спасибо Glory, что он умеет читать мысли
Вы о чём?
Явно ум за разум.
Разжёвываю для Maxx:
Glory: group by!
erfgwerfewr: Glory телепат
Mnior: очевидность - не телепатия

Очевидность:
1. Что хотел ТС
2. Как это решить надо

У ТС "ум за разум" что обычный group by превратил в distinct + over


А как вы, Maxx, поняли мой пост? Серьёзно. Объясните мне пожалуйста.
Может научусь выражаться яснее.
13 авг 13, 21:03    [14704539]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
rergregre
Guest
Mnior
Может научусь выражаться яснее.


короче
13 авг 13, 22:40    [14704857]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Mnior
А как вы, Maxx, поняли мой пост? Серьёзно. Объясните мне пожалуйста.
Может научусь выражаться яснее.

Честно понял по другому ,и начал сие только исходя из вот етого

14690193

Mnior
erfgwerfewr
скажи спасибо Glory, что он умеет читать мысли
Вы о чём?
Явно ум за разум. Гуманитарный. У обоих.

Потому как Glory сразу предлдожил нормальный вариант, вы опровергли. Вот я и подумал,что и простой group by вам не по вкусу. Посему попросил написать чето другое и по вашему мнениею не гуманитарное :)
Вообщем проехали
Да ,иногда, за вашей любовью "разлиться мыслею по древу" и академическим выкладкам - просто теряеш смысл вашей фразы ,в данном случае так и вышло.
Надеюсь недоразумение улажено ?
14 авг 13, 09:52    [14705995]     Ответить | Цитировать Сообщить модератору
 Re: min/max по индексу  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Maxx
Честно понял по другому
Надеюсь недоразумение улажено ?
Да всё нормально. Это изначально было понятно.
Просто вот думаю вы расскажите/поможете выяснить как писать правильно, чтобы меньше недоразумений было.
Мне нужно виденье вашего мировоззрения (+ постоянно его осознавать и учитывать).

Постоянно подстёгивать к сложному мышлению полезно. Не к запутанному, противоречивому, а к сложному, где нужно подумать.
Тренировать надо мышцы, чтобы они были сильными. :)
А отношение из этого иногда складываются такое - "Все вокруг очень умные и смогут сами всё понять".
Мой учитель по физике вообще стебался - вводил ненужную, сбивающую с толку информацию. Тренировал хорошо.

"скажи спасибо Glory" повелительное наклонение + сослагательное. 3 участника: кто сказал, действие от одного к другому.
А вот если было написано так "скажи ему спасибо" без явного "Glory"?
14 авг 13, 11:14    [14706464]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить