powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по синтаксису Update
12 сообщений из 112, страница 5 из 5
Вопрос по синтаксису Update
    #39912366
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint
Да давайте уже закончим с Вами.
Всё же ясно ?
вы либо действительно неадекватны, либо просто придуриваетесь...
Предсказание сбылось - ответа на вопрос нет, кода нет, идиотизм - налицо :)
...
Рейтинг: 0 / 0
Вопрос по синтаксису Update
    #39912388
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Человек загадка
22050667
...
Рейтинг: 0 / 0
Вопрос по синтаксису Update
    #39912396
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint
Человек загадка
22050667
Не пытайтесь меня подловить, не владея матчастью - только усугубите негативное впечатление о вас и ваших опусов у сообщества.
Для начала наберитесь знаний, чтобы ответить на вопрос "Зачем сортировать строки источника при массовой вставке в кластерный индекс?"
Подсказка - это напрямую связано с механизмом хранения данных в индексе, но никак не связано с упорядоченным хранением.
...
Рейтинг: 0 / 0
Вопрос по синтаксису Update
    #39912402
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
entrypoint
Человек загадка
22050667
Не пытайтесь меня подловить, не владея матчастью - только усугубите негативное впечатление о вас и ваших опусов у сообщества.
Для начала наберитесь знаний, чтобы ответить на вопрос "Зачем сортировать строки источника при массовой вставке в кластерный индекс?"
Подсказка - это напрямую связано с механизмом хранения данных в индексе, но никак не связано с упорядоченным хранением.


Зачем ловить
Так облажаться ещё нужно уметь )))) Спасибо за опыт

авторЗдесь же форум профессионалов, на котором делятся знаниями, помогают советом и всё такое, в том числе указывают на чужие ошибки, конструктивно, без оскорблений, как и подобает Программисту с большой буквы ))))
22056271

P.S.
автор"Зачем сортировать строки источника при массовой вставке в кластерный индекс?"
У что же у нас такое особенное с кластерным индексом, что при вставке в него сортировать ничего не нужно, может потому что
Код: sql
1.
* Кластеризованные индексы сортируют и хранят строки данных в таблицах или представлениях на основе их ключевых значений


https://docs.microsoft.com/ru-ru/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described?view=sql-server-ver15
22052270

Ах да, молчу ))) Мы же
неадекватны таки вы вместе с составителями документации 22056289

P.S.S Теперь Вы за пять минут сделали то, что не могли сделать за полторы недели ))))
...
Рейтинг: 0 / 0
Вопрос по синтаксису Update
    #39912467
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nullin,

22051809
nullin

Что же качается вашего order by newid(), то select без явного указания сортировки эквивалентен select ... order by (select null) - может сейчас наступит просветление?


Не поможете, воспользовался Вашим советом, но он почему-то не работает, почему-то он не сортирует в случайном порядке как нужно, хотя Вы и пишете, что order by newid() = select ... order by (select null)

Скрипт нужно выполнить несколько раз, чтобы получить нужный эффект
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
DECLARE @t AS TABLE(id INT NOT NULL PRIMARY KEY CLUSTERED); 

INSERT INTO @t(
       id
         )
SELECT 2 UNION ALL
SELECT 10 UNION ALL
SELECT 30 UNION ALL
SELECT 45;

SELECT 
       'Вывод без сортировки'
     , id
FROM 
     @t;

SELECT 
       'Cейчас наступит просветление'
     , id
FROM 
     @t
       ORDER BY
                (
                 SELECT 
                        NULL
                );

SELECT 
       'Непросветленный способ'
     , id
FROM 
     @t
       ORDER BY 
                NEWID();



Заранее благодарен
...
Рейтинг: 0 / 0
Вопрос по синтаксису Update
    #39912486
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint
У что же у нас такое особенное с кластерным индексом, что при вставке в него сортировать ничего не нужно, может потому что
Код: sql
1.
* Кластеризованные индексы сортируют и хранят строки данных в таблицах или представлениях на основе их ключевых значений

Что же до вас никак не дойдет: дискутировать, не зная матчасти - признак неадекватности.

Изучайте:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
use master;
set ansi_nulls, quoted_identifier, xact_abort on;
go

create database TestSortingOnInsert;
alter database TestSortingOnInsert set recovery full;
backup database TestSortingOnInsert to disk = 'nul:';
go

use TestSortingOnInsert;
go

create table dbo.t (id uniqueidentifier primary key clustered, filler char(500) null);
create table dbo.s (id uniqueidentifier, filler char(500) null);

declare @c int = 100000;

insert into dbo.t
 (id, filler)
 select top (@c)
  newid(), 'a'
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

insert into dbo.s
 (id, filler)
 select top (@c)
  newid(), 'b'
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;
go

begin tran;
set statistics xml, time on;
insert into dbo.t (id, filler) select id, filler from dbo.s option (/*Запрещаем требовать сортировку строк источника*/querytraceon 8795);
set statistics xml, time off;

/*Сколько было сожрано места в журнале транзакций*/
select
 'Без сортировки', db_name(dbt.database_id) as [БД], dbt.database_transaction_log_bytes_used + dbt.database_transaction_log_bytes_used_system as [Сожрано в ЖТ]
from
 sys.dm_tran_current_transaction ct join
 sys.dm_tran_database_transactions dbt on dbt.transaction_id = ct.transaction_id;

rollback;
go

begin tran;
set statistics xml, time on;
insert into dbo.t (id, filler) select id, filler from dbo.s order by id;
set statistics xml, time off;

/*Сколько было сожрано места в журнале транзакций*/
select
 'С сортировкой', db_name(dbt.database_id) as [БД], dbt.database_transaction_log_bytes_used + dbt.database_transaction_log_bytes_used_system as [Сожрано в ЖТ]
from
 sys.dm_tran_current_transaction ct join
 sys.dm_tran_database_transactions dbt on dbt.transaction_id = ct.transaction_id;

rollback;
go

use master;
alter database TestSortingOnInsert set single_user with rollback immediate;
drop database TestSortingOnInsert;
go

БДСожрано в ЖТБез сортировкиTestSortingOnInsert118249508Без сортировкиtempdb0

БДСожрано в ЖТС сортировкойTestSortingOnInsert61107580С сортировкойtempdb0
...
Рейтинг: 0 / 0
Вопрос по синтаксису Update
    #39912489
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Наслаждайтесь
22056482

Кстати может с 22056566 поможете, а то край как нужно (((
у меня вроде работает, но хочется по фэншую, как у взрослых
...
Рейтинг: 0 / 0
Вопрос по синтаксису Update
    #39912512
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Может к документации ?

Вы используете NEWID() ( "функция NEWID вызывает непредсказуемый уровень нагрузки" ), которые генерирует непоследовательный uniqueidentifier и при вставке его в кластерный индекс много чего происходит для того, чтобы вставить его то в конец, то в начало, в середину.
для того чтобы избежать такого поведения рекомендуется использовать функцию NEWSEQUENTIALID() ( "использование NEWSEQUENTIALID может ускорить работу по сравнению с использованием функции NEWID" ), которая
авторСоздает идентификатор GUID, имеющий значение, большее любого идентификатора GUID, который был прежде создан на указанном компьютере при помощи этой функции с момента запуска Windows
https://docs.microsoft.com/ru-ru/sql/t-sql/functions/newsequentialid-transact-sql?view=sql-server-ver15

Немного изменяем Ваш скрипт только на этом основании, не вникая в тонкости и сразу же получаем и прирост производительности и с памятью уже все не так плохо. И это только всего оптимизация в лоб, без погружения, просто, книжку прочитал и всё (((

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
use master;
set ansi_nulls, quoted_identifier, xact_abort on;
go

create database TestSortingOnInsert;
alter database TestSortingOnInsert set recovery full;
backup database TestSortingOnInsert to disk = 'nul:';
go

use TestSortingOnInsert;
go

create table dbo.t (id uniqueidentifier primary key clustered DEFAULT NEWSEQUENTIALID ( ), filler char(500) null);
create table dbo.s (id uniqueidentifier DEFAULT NEWSEQUENTIALID ( ), filler char(500) null);

declare @c int = 100000;

insert into dbo.t
 (filler)
 select top (@c)
  'a'
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

insert into dbo.s
 (filler)
 select top (@c)
   'b'
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;
go

begin tran;
set statistics xml, time on;
insert into dbo.t (id, filler) select id, filler from dbo.s option (/*Запрещаем требовать сортировку строк источника*/querytraceon 8795);
set statistics xml, time off;

/*Сколько было сожрано места в журнале транзакций*/
select
 'Без сортировки', db_name(dbt.database_id) as [БД], dbt.database_transaction_log_bytes_used + dbt.database_transaction_log_bytes_used_system as [Сожрано в ЖТ]
from
 sys.dm_tran_current_transaction ct join
 sys.dm_tran_database_transactions dbt on dbt.transaction_id = ct.transaction_id;

rollback;
go

begin tran;
set statistics xml, time on;
insert into dbo.t (id, filler) select id, filler from dbo.s order by id;
set statistics xml, time off;

/*Сколько было сожрано места в журнале транзакций*/
select
 'С сортировкой', db_name(dbt.database_id) as [БД], dbt.database_transaction_log_bytes_used + dbt.database_transaction_log_bytes_used_system as [Сожрано в ЖТ]
from
 sys.dm_tran_current_transaction ct join
 sys.dm_tran_database_transactions dbt on dbt.transaction_id = ct.transaction_id;

rollback;
go

use master;
alter database TestSortingOnInsert set single_user with rollback immediate;
drop database TestSortingOnInsert;
go




P.S. 22056596 Нет ?
...
Рейтинг: 0 / 0
Вопрос по синтаксису Update
    #39912614
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый entrypoint, вы просили показать зачем может понадобится сортировка при массовой вставке в кластерный индекс? Просили. Было показано? Было.
Что-то не устраивает? Ну так это уже ваши трудности.

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

entrypoint
стати может с 22056566 поможете, а то край как нужно (((
у меня вроде работает, но хочется по фэншую, как у взрослых
Вы даже толком прочитать не можете, что написал nullin. Какая уж тут помощь? Так что дерзайте самостоятельно.
К тому же, включать телепатические способности, чтобы понять чего вы там пытаетесь изобразить и что для вас феншуй, лично мне просто лень.
...
Рейтинг: 0 / 0
Вопрос по синтаксису Update
    #39912644
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
entrypoint, вы действительно не поняли то, что я вам отвечал.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare @t as table(id int not null primary key clustered); 
insert into @t(id) values (0), (1), (2), (3);

select N'Вывод без сортировки', id, N'Пустое поле' k
  from @t; 

select N'Cейчас наступит просветление', id, k = (select N'Пустое поле')
  from @t
 order by k;

select N'Непросветленный способ', id, k = newid()
 from @t
order by k;


dbfiddle


Утверждение "order by newid() = select ... order by (select null)" ложно.

Пожалуйста, приглядитесь внимательнее к моему сообщению и dbfiddle.
...
Рейтинг: 0 / 0
Вопрос по синтаксису Update
    #39912646
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nullin
Утверждение "order by newid() = select ... order by (select null)" ложно.

На всякий случай, поясню, Ваше утверждение о моих сказанных словах - ложное,
и лучше вам это признать, чтобы не подвергать людей сомнению в вашей адекватности.
...
Рейтинг: 0 / 0
Вопрос по синтаксису Update
    #39912691
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Я, пожалуй, прикрою. Пора прекращать этот вертеп.

Уважаемый entrypoint,

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


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