powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / чтение из партиции по ее номеру
18 сообщений из 18, страница 1 из 1
чтение из партиции по ее номеру
    #40125209
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добрый день, прошу подсказать, как можно сделать выборку (и апдейт) обратившись целиком к одной партиции?
(изменения коснуться не ключа партиции)

можно ли без условия range в теле запроса where указать что выборка затрагивает конкретную партицию, зная ее номер?
или надо полюбому знать этот интервал и задавать в условии where и тода будет норм обращение?
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125210
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в postgres например секция это обычная таблица, и там можно считать значения или проапдейтить ее зная только название этой таблицы, даже если секционировали таблицу TAB1 можно обратится к ней минуя чтение из ее партиций добавив ONLY

есть ли аналог в ms sql?
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125211
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka,нашел=)
where $partition.func_range(id) = номер
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125233
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka,

на днях буквально ту же проблему решал..
это пример от ms.
но ведь это не совсем правильно..
это проверка всех ключей через функцию секционирования и неужели нет возможности тупо указать конкретную секцию?
ведь есть команды которые это делают, switch partition, например.
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125237
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor
Legushka,

на днях буквально ту же проблему решал..
это пример от ms.
но ведь это не совсем правильно..
это проверка всех ключей через функцию секционирования и неужели нет возможности тупо указать конкретную секцию?
ведь есть команды которые это делают, switch partition, например.


Изобретаем непромокаемый порох?
Есть параметр секционирования - укажи - будет конкретная секция.
Если до усрачки надо 1,2,3... - секционируй по 1,2,3.
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125258
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor
это проверка всех ключей через функцию секционирования

Только синтаксически. В плане будет обращение к конкретной секции.
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125259
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor
тупо указать конкретную секцию


Дело в том, что таблица (куча или кластерный индекс) и индексы могут быть секционированны по разному, и, соответственно одна и таже строка может оказаться в разных секциях, в зависимости от выбранного для ее поиска индекса.
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125310
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

одна и та же запись физически не может находится в 2х разных секциях. в случае только если создан покрывающий индекс.
кучу же вообще секционировать нельзя.
да в любом случае надо же понимать что делаешь.. есть конкретная задача: взять секцию.
та же switch partition нормально разбирается с этим.
и что-то не видел ни одного примера как можно сделать switch partition у ключа

проверил на тупом примере где значение поля является значением функции секционирования и вызов функции через $partition.
планы выполнения одинаковые.. затрагивается одна и та же секция, выбирается одно и то же количество.
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125368
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor
одна и та же запись физически не может находится в 2х разных секциях. в случае только если создан покрывающий индекс.


Покрывающий индекс не обязателен, план вполне может содержать index seek + lookup.
Вы не поняли главного, в SQL Server секционируется не таблица, а HOBT (Heap Or B-Tree). И когда вы хотите выбрать данные из конкретной секции (по номеру), просто имени таблицы не достаточно, нужно указать где эти секции отсчитывать.

Для понимания

Индексы могут секционированы по разным схемам (а значит и функциям) секционирования, более того, никто не запрещает сделать два индекса по одному полую но с разыми функциями секционирования, так что в общем случаем для указания №секции, нужно указывать поле + функцию секционирования, что и делается через $partition

Так же, вы можете более одного раза использовать $partition в одном запросе с разными полями и функциями и на основе этих данных SQL Server "решит" что из этого можно использовать для ускорения запроса.

ShIgor
кучу же вообще секционировать нельзя.
можно


ShIgor
а в любом случае надо же понимать что делаешь.. есть конкретная задача: взять секцию.
читай выше


ShIgor
та же switch partition нормально разбирается с этим.


в случаях с невыровненными по секциям индексами switch partition сделать просто нельзя, select c явным указанием секции при этом возможен

ShIgor
проверил на тупом примере где значение поля является значением функции секционирования и вызов функции через $partition.


если у вас уже есть явный фильтр по значению ключа секционирования, конечно вам не нужен фильтр по номеру секции, это за вас сделает SQL Server, а вот если вам нужно просто выбрать "2-ю секцию", то вы можете либо через метаданные найти ее границы и использовать в качестве фильтра, либо просто использовать $partition.
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125499
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если индексы не выровнены по функции секционирования, то в сложных случаях partition elimination не произойдёт и будет полное сканирование.
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125500
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Если индексы не выровнены по функции секционирования, то в сложных случаях partition elimination не произойдёт и будет полное сканирование.


Да, если в качестве начальной "точки входа" будет выбран другой индекс (не тот, что секционирован по указанной в фильтре функции), само условие фильтрации при этом отработает корректно
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125515
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

как всегда, я про физику, мне про лирику..
не надо объяснять теорию, у MS достаточно документации на эту тему.

и из Вашего поста все известно, кроме одного пункта - покажите пример секционирования кучи не имея ни одного индекса.
да и даже имея индекс.. НО не его секционирование, а чтобы в результате сама куча разложилась на несколько файловых групп.
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125516
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor
как всегда, я про физику, мне про лирику..


про физику (как оно устроено) как раз пишу я, вы же просто отказываетесь слушать и уперлись "в хочу как alter partition"

ShIgor
не надо объяснять теорию, у MS достаточно документации на эту тему.

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


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



ничем не отличается от любого другого секционирования


создает нужные функцию и схему секционирования, а затем таблицу кучу
create table heap_table (part_key int) on ps_...(part_key)
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125528
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor,

как-то Вы плохо ознакомились в документацией, несмотря на "у MS достаточно документации".
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE
    { database_name.schema_name.table_name | schema_name.table_name | table_name }
    [ AS FileTable ]
    ( {   <column_definition>
        | <computed_column_definition>
        | <column_set_definition>
        | [ <table_constraint> ] [ ,... n ]
        | [ <table_index> ] }
          [ ,...n ]
          [ PERIOD FOR SYSTEM_TIME ( system_start_time_column_name
             , system_end_time_column_name ) ]
      )
    [ ON { partition_scheme_name ( partition_column_name )
           | filegroup
           | "default" } ]
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125538
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

лирика она в учебниках, физика вот тут под столом стоит.

у ms не возникло вопроса и они написали pаrtition by number там где ему захотелось и всякие не выровненные индексы - идите лесом..
ну и почему в селект не сделать то же самое?? "ах у вас не выровнено - идите .. через $partition by func"
кстати, $partition.pf_by_int(int_filed) = @value отлично работает, но $partition.pf_by_int(@value) = @value тоже можно написать, но возвращает все секции

с кучами действительно да.. можно. никогда не пользовался такой возможностью, а когда не пользуешься - значит нельзя :)

Владислав Колосов,
+ спс
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125568
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor
ну и почему в селект не сделать то же самое??
Вы вдумайтесь в смысл операций.
В селекте сервер перебирает планы выполнения, пытаясь вычислить стоимость этих планов, а в планах может быть обращение к разным партициям и к разным объектам для получения одного и того же результата.
Ещё селект может обратиться к одним объектам, не обращаясь к другим, которые с теми объектами связаны, это не запрещено.

А при переключении партиции объект "грубо раздирается", и вполне понятно, что это может затронуть другие объекты, которые с ним связаны, отсюда и требования к выравниванию.
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125587
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

че вы меня все уговариваете как будто я против? я просто посетовал на наличие одного действа и отсутствия аналогичного в похожей ситуации.. ведь что мешает мне исключить секцию, считать из нее все и включить ее обратно?
...
Рейтинг: 0 / 0
чтение из партиции по ее номеру
    #40125643
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor,

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


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