powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Связать две таблицы join'ом при связи 1:М.
6 сообщений из 56, страница 3 из 3
Связать две таблицы join'ом при связи 1:М.
    #40035864
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

лично с Вас, $20 за ответ. Реквизиты пришлю в ответ на письмо.

Ответ обещаю с примером, причем повторяемым.
...
Рейтинг: 0 / 0
Связать две таблицы join'ом при связи 1:М.
    #40035880
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

Ну докажите сначала, что Вы в состоянии дать адекватный пример. А то деньги возьмете и с приветом...
Хотя бы принцип его работы объясните.
...
Рейтинг: 0 / 0
Связать две таблицы join'ом при связи 1:М.
    #40035890
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Попробуйте сами ответить на вопросы:
Читается ли какой-то индекс таблицы в запросе SELECT * FROM table MAXDOP(1)?
Читается ли какой-то индекс таблицы в запросе SELECT * FROM table MAXDOP(0)?
...
Рейтинг: 0 / 0
Связать две таблицы join'ом при связи 1:М.
    #40035985
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
Читается ли какой-то индекс таблицы в запросе SELECT * FROM table MAXDOP(1)?
Читается ли какой-то индекс таблицы в запросе SELECT * FROM table MAXDOP(0)?
Расшифруйте глубинный смысл данных вопросов.

Даже если Ваша таблица в обсуждаемом примере кластерная, физических чтений не будет больше, чем общее число страниц кластерного индекса. Потому что сервер не дурак и не будет поднимать с диска страницу, если она уже есть в BP.
...
Рейтинг: 0 / 0
Связать две таблицы join'ом при связи 1:М.
    #40035988
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Я же Вам выше стоимость моих ответов озвучил. Жду в e-mail
...
Рейтинг: 0 / 0
Связать две таблицы join'ом при связи 1:М.
    #40036051
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
Я же Вам выше стоимость моих ответов озвучил. Жду в e-mail
Ну Вы, пока что, не продемонстрировали в данной теме, что Ваши ответы имеют хоть какую-то ценность.
Так что имею все основания считать, что потрачу деньги впустую.

Свои утверждения принято либо доказывать, либо ссылаться на авторитетные источники. Вы не сделали ни того, ни другого.
Своим опусом 22261187 Вы ничего не доказали, а фразой
ptr128
Во-вторых, видим, что параллельный план запроса в данном случае потребовал 2246 дополнительных обращений к кешу данных. То есть, при недостатке памяти дважды с диска могло читаться 0.6% страниц. Таким процентом я готов пренебречь. А было бы 6% - это уже стало бы поводом для размышлений в случае многопользовательской системы.
только продемонстрировали отсутствие некоторых знаний.
К тому же, это вообще не ответ на обсуждаемый вопрос.

В завершение, у меня для Вас, совершенно бесплатно, два подарка:
1. Для восполнения отсутствующих знаний - https://www.red-gate.com/simple-talk/sql/learn-sql-server/understanding-and-using-parallelism-in-sql-server/ и https://www.sqlservergeeks.com/lru-k-algorithm-quick-look/
2. Скрипт, демонстрирующий физические чтения, который можете использовать для собственных экспериментов
Код: 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.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
use master;
set ansi_nulls, quoted_identifier, xact_abort on;
go

create database TestData;
alter database TestData set recovery simple;
go

use TestData;
go

create table dbo.t_clustered (id int identity not null primary key, v int null, filler char(100) null);
create table dbo.t_heap (id int identity not null, v int null, filler char(100) null);

insert into dbo.t_clustered
 (v)
output
 inserted.v into dbo.t_heap (v)
 select top (1000000)
  1
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

select
 sum(page_count) as t_clustered__total_pages,
 sum(case when index_level > 0 then page_count else 0 end) as t_clustered__nonleaf_pages
from
 sys.dm_db_index_physical_stats(db_id(), object_id('dbo.t_clustered'), null, null, 'detailed');

select
 sum(page_count) as t_heap__total_pages
from
 sys.dm_db_index_physical_stats(db_id(), object_id('dbo.t_heap'), null, null, 'detailed');
go

-- запретим prefetch и read ahead
dbcc traceon(652, -1);
dbcc traceon(8744, -1);
go

use master;
go

-- очистим BP от данных из TestData
alter database TestData set offline with rollback immediate;
alter database TestData set online;
go

print '--- Seril plan ------------------------------------';
declare @c bigint;
set statistics xml, io on;
select @c = count(v) from TestData.dbo.t_clustered option(maxdop 1);
select @c = count(v) from TestData.dbo.t_heap option(maxdop 1);
set statistics xml, io off;
go

-- очистим BP от данных из TestData
alter database TestData set offline with rollback immediate;
alter database TestData set online;
go

print '--- Parallel plan ------------------------------------';
declare @c bigint;
set statistics xml, io on;
select @c = count(v) from TestData.dbo.t_clustered option (use hint('enable_parallel_plan_preference'));
select @c = count(v) from TestData.dbo.t_heap option (use hint('enable_parallel_plan_preference'));
set statistics xml, io off;
go

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

dbcc traceoff(652, -1);
dbcc traceoff(8744, -1);
go



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
--- Seril plan ------------------------------------
Table 't_clustered'. Scan count 1, logical reads 14495, physical reads 14495, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.

Table 't_heap'. Scan count 1, logical reads 14493, physical reads 14493, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.

--- Parallel plan ------------------------------------
Table 't_clustered'. Scan count 5, logical reads 14652, physical reads 14547, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.

Table 't_heap'. Scan count 5, logical reads 14493, physical reads 14493, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
...
Рейтинг: 0 / 0
6 сообщений из 56, страница 3 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Связать две таблицы join'ом при связи 1:М.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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