Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Как в таблице куче получить порядок строк  [new]
таблица-куча
Guest
Коллеги,

есть таблица куча с одной колонкой и значениями, например числовыми, которые записаны в произвольном порядке. Можно ли как-то используя системные представления понять что после записи 1234 была находятся данные 189?
Или как это можно сделать проще?
22 сен 15, 10:24    [18179073]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
SELECT %%physloc%% AS physloc from Mytable
22 сен 15, 10:38    [18179138]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
таблица-куча, можно содержимое страниц dbcc распечатать, но это уже за гранью вменяемой работы с базой данных.
Может вам просто почитать про select и order by?
22 сен 15, 10:55    [18179242]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
таблица-куча,

дык Вы не знаете основных постулатов реляционной алгебры , поизучайте материалы. Ваш вопрос просто абсурден.
22 сен 15, 11:09    [18179307]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
таблица-куча
Guest
Владислав Колосов,

начнем с того, что это не я не знаю.

Вот такое есть задание:
Для таблицы-кучи получить предыдущее значение по запросу.

Например:
в таблице-куче есть поле id, в нем значения:

12
34
5
123
5678
1290
112


Для @id = 123
Должно выводиться запросом 5.

Вот как это еще сделать?
22 сен 15, 11:20    [18179360]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Владислав Колосов
таблица-куча,

дык Вы не знаете основных постулатов реляционной алгебры , поизучайте материалы. Ваш вопрос просто абсурден.


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

https://msdn.microsoft.com/en-us/library/bb677173.aspx#keyprops
Indexing Strategies for Hierarchical Data

There are two strategies for indexing hierarchical data:

Depth-first

A depth-first index stores the rows in a subtree near each other. For example, all employees that report through a manager are stored near their managers' record.

In a depth-first index, all nodes in the subtree of a node are co-located. Depth-first indexes are therefore efficient for answering queries about subtrees, such as "Find all files in this folder and its subfolders".

Breadth-first

A breadth-first stores the rows each level of the hierarchy together. For example, the records of employees who directly report to the same manager are stored near each other.

In a breadth-first index all direct children of a node are co-located. Breadth-first indexes are therefore efficient for answering queries about immediate children, such as "Find all employees who report directly to this manager".



В некоторых СУБД вон как можно Overview of Table Clusters
22 сен 15, 11:31    [18179413]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
SELECT row_number() over(order by %%physloc%%) AS physloc, id from Mytable
22 сен 15, 11:31    [18179415]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Glory
SELECT row_number() over(order by %%physloc%%) AS physloc, id from Mytable

бедный ТС сейчас себе голову сломает.... особенно если физически записи расположены не так как он видит ,ведь в селекте без ордер бай никто ничего не гарантирует
22 сен 15, 12:21    [18179724]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
имя таблицы на что-то намекает?
22 сен 15, 13:10    [18180023]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
таблица-куча,

ну раз не знаете, то намекну, что в реляционных таблицах порядка записи не существует, все записи и столбцы позиционно равны и не лучше и не хуже друг друга. Нужный порядок можно получить запросом данных.
22 сен 15, 13:29    [18180167]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
таблица-куча
Вот такое есть задание:
Для таблицы-кучи получить предыдущее значение по запросу.

Например:
в таблице-куче есть поле id, в нем значения:

12
34
5
123
5678
1290
112

Для @id = 123
Должно выводиться запросом 5.

А второй раз выведет
112
1290
5678
123
5
34
12

и нужно будет 5678?

Вообще приведите тут полный текст задания.
22 сен 15, 13:31    [18180180]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
таблица-куча
Вот такое есть задание:
Для таблицы-кучи получить предыдущее значение по запросу.

Например:
в таблице-куче есть поле id, в нем значения:

12
34
5
123
5678
1290
112


Для @id = 123
Должно выводиться запросом 5.
Написали - куча, а думаете, что это упорядоченный список.

Кучу надо нарисовать так, что бы было понятнее:
      123
112 5 1290
12 34 5678 123

И ещё, каждый раз, когда вы на неё посмотрите, она будет выглядеть по другому, она постоянно перемешивается.

Вот так будет наглядно, вот, когда перед глазами эта постоянно перемешивающаяся куча, и нужно читать задание "Для таблицы-кучи получить предыдущее значение по запросу."
22 сен 15, 13:46    [18180275]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
SQL2008
таблица-куча
Вот такое есть задание:
Для таблицы-кучи получить предыдущее значение по запросу.

Например:
в таблице-куче есть поле id, в нем значения:

12
34
5
123
5678
1290
112

Для @id = 123
Должно выводиться запросом 5.

А второй раз выведет
112
1290
5678
123
5
34
12

и нужно будет 5678?

Вообще приведите тут полный текст задания.

как это он на куче задом-наперед выведет?
там же без вариантов allocation order scan.
и потом, вопрос не о выводе, а о том, как записано.
a как записано, Glory уже вывел,
хотя по-моему, и это не катит.
т.к. если при вставке почему-то высвободились страницы из начала файла,
запись могла пройти типа (PID) 8,9,1,2
а %%physloc%% отсортирует 1,2,8,9.

короче, чтоб было все точно, сперва получаем через dbcc ind все страницы,
а они там уже все указывают на следующие: NextPageFID, NextPagePID
вот расположив их в нужном порядке, выцепив FID, PID через sys.fn_PhysLocFormatter(), можно отсортировать.
------
а кому это так делать нечего?
22 сен 15, 13:51    [18180317]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
o-o
вот расположив их в нужном порядке, выцепив FID, PID через sys.fn_PhysLocFormatter(), можно отсортировать.
Это если не было удалений и потом вставок.
В общем случае ИМХО задача вообще не решается.

А в необщем - можно предположить, что людям нужна сортировка в том порядке, в котором выводит обычный селект без условий и ордербай. Пусть даже это порядок может быть иногда и разный - ошибка тут не имеет значения (не может иметь, просто исходя из постановки задачи).
Тогда можно пронумеровать эти записи, сделав select row_number() over (order by null), и использовать это значение джля сортировки.
22 сен 15, 13:57    [18180373]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
alexeyvg
Тогда можно пронумеровать эти записи, сделав select row_number() over (order by null), и использовать это значение джля сортировки
А смысл?
Это же всё равно, что ORDER BY совсем не писать.
22 сен 15, 14:00    [18180386]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
alexeyvg
Тогда можно пронумеровать эти записи, сделав select row_number() over (order by null), и использовать это значение джля сортировки
А смысл?
Это же всё равно, что ORDER BY совсем не писать.
Или это для того, чтобы достать значение во внешнем SELECT?
22 сен 15, 14:00    [18180395]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
SQL2008
Вообще приведите тут полный текст задания.


o-o
а кому это так делать нечего?


Вспомнился анекдот:

Дочь 8 лет спрашивает маму:
- А что такое аборт?
Мама краснея объясняет и спрашивает:
- А где ты такое вычитала?
Та достает детскую книжку:
- "Волны бились о борт корабля"
22 сен 15, 14:03    [18180432]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
SQL2008
SQL2008
Вообще приведите тут полный текст задания.


o-o
а кому это так делать нечего?


Вспомнился анекдот:

Дочь 8 лет спрашивает маму:
- А что такое аборт?
Мама краснея объясняет и спрашивает:
- А где ты такое вычитала?
Та достает детскую книжку:
- "Волны бились о борт корабля"


при этом маму звали Кора
22 сен 15, 14:09    [18180473]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
alexeyvg
o-o
вот расположив их в нужном порядке, выцепив FID, PID через sys.fn_PhysLocFormatter(), можно отсортировать.
Это если не было удалений и потом вставок.
В общем случае ИМХО задача вообще не решается.

Да, разумеется.
А вообще подозреваю, это очередная уловка "побеседовать обо всем и надолго".
Было уже что-то про оптимизацию завроса с условием a = @a and b = @b
22 сен 15, 14:13    [18180501]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
Когда речь про Кору, обычно и ТС соответствующий, а тут вроде как раз вменяемый. И он же написал о системных представлениях, т. е. как раз хочет умнику, задавшему вопрос, выдать решение с сортировкой по страницам и слотам.
Щас доберусь до компа, в 2012ом есть представления, выдающие соседние страницы, обойдемся без dbcc ind, пускай ТС поставит на место вопрошавшего
22 сен 15, 14:20    [18180547]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
+ до кучи к allocation order scan

https://technet.microsoft.com/en-us/library/ms191475(v=sql.105).aspx
Advanced Scanning

In SQL Server Enterprise, the advanced scan feature allows multiple tasks to share full table scans. If the execution plan of a Transact-SQL statement requires a scan of the data pages in a table and the Database Engine detects that the table is already being scanned for another execution plan, the Database Engine joins the second scan to the first, at the current location of the second scan. The Database Engine reads each page one time and passes the rows from each page to both execution plans. This continues until the end of the table is reached.

...

22 сен 15, 14:23    [18180571]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
churupaha,
если это мне, то
пускай сканит, как хочет, пусть в соседний скан вторгается,
интересует же порядок укладки записей.
o-o
и потом, вопрос не о выводе, а о том, как записано.

P.S. задом-наперед не будет и при "соседнем скане" :P
22 сен 15, 14:39    [18180659]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
iap
iap
Это же всё равно, что ORDER BY совсем не писать.
Или это для того, чтобы достать значение во внешнем SELECT?
Ну да, не писать, и при этом иметь возможность ссылаться на "предыдущую запись"
22 сен 15, 14:46    [18180693]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
про sys.dm_db_database_page_allocations (>=2012)
мало, что нет никакого хэлпа,
так оно еще и показывает пустыми next_page_file_id, next_page_page_id.
и пойди им пожалуйся, что пустые, может, это так задумано
так что dbcc ind рулит
22 сен 15, 14:55    [18180744]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
o-o
churupaha,
если это мне, то
пускай сканит, как хочет, пусть в соседний скан вторгается,
интересует же порядок укладки записей.
o-o
и потом, вопрос не о выводе, а о том, как записано.

P.S. задом-наперед не будет и при "соседнем скане" :P


да не то чтобы, просто подкинул инфы для обсуждения.

хм... а если запустить фоном dbcc shrinkfile. с порядком уже будет не однозначно все.
22 сен 15, 14:56    [18180752]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить