|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
добрый день, прошу подсказать, как можно сделать выборку (и апдейт) обратившись целиком к одной партиции? (изменения коснуться не ключа партиции) можно ли без условия range в теле запроса where указать что выборка затрагивает конкретную партицию, зная ее номер? или надо полюбому знать этот интервал и задавать в условии where и тода будет норм обращение? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 11:12 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
в postgres например секция это обычная таблица, и там можно считать значения или проапдейтить ее зная только название этой таблицы, даже если секционировали таблицу TAB1 можно обратится к ней минуя чтение из ее партиций добавив ONLY есть ли аналог в ms sql? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 11:19 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
Legushka,нашел=) where $partition.func_range(id) = номер ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 11:30 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
Legushka, на днях буквально ту же проблему решал.. это пример от ms. но ведь это не совсем правильно.. это проверка всех ключей через функцию секционирования и неужели нет возможности тупо указать конкретную секцию? ведь есть команды которые это делают, switch partition, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 16:10 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
ShIgor Legushka, на днях буквально ту же проблему решал.. это пример от ms. но ведь это не совсем правильно.. это проверка всех ключей через функцию секционирования и неужели нет возможности тупо указать конкретную секцию? ведь есть команды которые это делают, switch partition, например. Изобретаем непромокаемый порох? Есть параметр секционирования - укажи - будет конкретная секция. Если до усрачки надо 1,2,3... - секционируй по 1,2,3. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 16:27 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
ShIgor это проверка всех ключей через функцию секционирования Только синтаксически. В плане будет обращение к конкретной секции. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 19:46 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
ShIgor тупо указать конкретную секцию Дело в том, что таблица (куча или кластерный индекс) и индексы могут быть секционированны по разному, и, соответственно одна и таже строка может оказаться в разных секциях, в зависимости от выбранного для ее поиска индекса. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 19:49 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
msLex, одна и та же запись физически не может находится в 2х разных секциях. в случае только если создан покрывающий индекс. кучу же вообще секционировать нельзя. да в любом случае надо же понимать что делаешь.. есть конкретная задача: взять секцию. та же switch partition нормально разбирается с этим. и что-то не видел ни одного примера как можно сделать switch partition у ключа проверил на тупом примере где значение поля является значением функции секционирования и вызов функции через $partition. планы выполнения одинаковые.. затрагивается одна и та же секция, выбирается одно и то же количество. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 12:56 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 19:12 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
Если индексы не выровнены по функции секционирования, то в сложных случаях partition elimination не произойдёт и будет полное сканирование. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 13:08 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
Владислав Колосов Если индексы не выровнены по функции секционирования, то в сложных случаях partition elimination не произойдёт и будет полное сканирование. Да, если в качестве начальной "точки входа" будет выбран другой индекс (не тот, что секционирован по указанной в фильтре функции), само условие фильтрации при этом отработает корректно ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 13:11 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
msLex, как всегда, я про физику, мне про лирику.. не надо объяснять теорию, у MS достаточно документации на эту тему. и из Вашего поста все известно, кроме одного пункта - покажите пример секционирования кучи не имея ни одного индекса. да и даже имея индекс.. НО не его секционирование, а чтобы в результате сама куча разложилась на несколько файловых групп. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 14:36 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
ShIgor как всегда, я про физику, мне про лирику.. про физику (как оно устроено) как раз пишу я, вы же просто отказываетесь слушать и уперлись "в хочу как alter partition" ShIgor не надо объяснять теорию, у MS достаточно документации на эту тему. если вы знаете теорию, у вас не должно даже возникнуть вопроса, почему для выбора секции требуется указать ключ и функцию секционирования. ShIgor и из Вашего поста все известно, кроме одного пункта - покажите пример секционирования кучи не имея ни одного индекса. да и даже имея индекс.. НО не его секционирование, а чтобы в результате сама куча разложилась на несколько файловых групп. ничем не отличается от любого другого секционирования создает нужные функцию и схему секционирования, а затем таблицу кучу create table heap_table (part_key int) on ps_...(part_key) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 14:45 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
ShIgor, как-то Вы плохо ознакомились в документацией, несмотря на "у MS достаточно документации". Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 15:41 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
msLex, лирика она в учебниках, физика вот тут под столом стоит. у ms не возникло вопроса и они написали pаrtition by number там где ему захотелось и всякие не выровненные индексы - идите лесом.. ну и почему в селект не сделать то же самое?? "ах у вас не выровнено - идите .. через $partition by func" кстати, $partition.pf_by_int(int_filed) = @value отлично работает, но $partition.pf_by_int(@value) = @value тоже можно написать, но возвращает все секции с кучами действительно да.. можно. никогда не пользовался такой возможностью, а когда не пользуешься - значит нельзя :) Владислав Колосов, + спс ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 16:04 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
ShIgor ну и почему в селект не сделать то же самое?? В селекте сервер перебирает планы выполнения, пытаясь вычислить стоимость этих планов, а в планах может быть обращение к разным партициям и к разным объектам для получения одного и того же результата. Ещё селект может обратиться к одним объектам, не обращаясь к другим, которые с теми объектами связаны, это не запрещено. А при переключении партиции объект "грубо раздирается", и вполне понятно, что это может затронуть другие объекты, которые с ним связаны, отсюда и требования к выравниванию. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 19:50 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
alexeyvg, че вы меня все уговариваете как будто я против? я просто посетовал на наличие одного действа и отсутствия аналогичного в похожей ситуации.. ведь что мешает мне исключить секцию, считать из нее все и включить ее обратно? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 20:42 |
|
чтение из партиции по ее номеру
|
|||
---|---|---|---|
#18+
ShIgor, в описанном случае, переключения секции в таблицу, Вы гарантированно прочтёте все данные. А если будете выбирать секции по щучьему велению, то такой гарантии нет и достоверность чтения будет нарушена. Если операции выполняются над секцией с указанием номера, то они относятся только к мета-данным секции, а не к пользовательским данным, которые в ней содержатся. Здесь нарушения целостности нет. Вместо секционированной таблицы можно использовать секционированное представление и обращаться к "секции" напрямую по имени таблицы, если этого требует бизнес-логика. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 01:13 |
|
|
start [/forum/topic.php?fid=46&tid=1683948]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
183ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 298ms |
0 / 0 |