Игнорирование необъясненную HTML файл и любые случайные флуктуации в CPU и исполнения времени ради обсуждение, короткий ответ может заключаться в том, что SAS обрабатывает различные объединения по-разному по-разному. Возможно, это не имеет большого значения для файлов размером с примеры здесь, но это стоит знать.
Более длинный ответ заключается в том, что это может зависеть в некоторой степени от точной версии SAS, которую вы используете. В SAS 9.4 с вашим примером наборами данных, план запроса я вижу генерироваться одинаков для обоего объединений, если оставить proc sql
свои собственные устройства:
52 /* Method 1: */
53
54 proc sql _method;
55 select a.*, b.*
56 from data1 as a, data2 as b
57 where a.name1= data2.name2
58 ;
NOTE: SQL execution methods chosen are:
sqxslct
sqxjhsh
sqxsrc(WORK.DATA1(alias = A))
sqxsrc(WORK.DATA2(alias = B))
59 quit;
NOTE: PROCEDURE SQL used (Total process time):
real time 0.01 seconds
user cpu time 0.01 seconds
system cpu time 0.00 seconds
memory 5469.21k
OS Memory 32668.00k
Timestamp 09/08/2015 06:43:09 PM
Step Count 457 Switch Count 50
Page Faults 0
Page Reclaims 87
Page Swaps 0
Voluntary Context Switches 156
Involuntary Context Switches 14
Block Input Operations 0
Block Output Operations 16
60 /* Method 2: */
61
62 proc sql _method;
63 select a.* , b.*
64 from data1 as a inner join data2 as b
65 on a.name1 = b.name2
66 ;
NOTE: SQL execution methods chosen are:
sqxslct
sqxjhsh
sqxsrc(WORK.DATA1(alias = A))
sqxsrc(WORK.DATA2(alias = B))
67 quit;
NOTE: PROCEDURE SQL used (Total process time):
real time 0.01 seconds
user cpu time 0.01 seconds
system cpu time 0.00 seconds
memory 5467.81k
OS Memory 32924.00k
Timestamp 09/08/2015 06:43:09 PM
Step Count 458 Switch Count 50
Page Faults 0
Page Reclaims 26
Page Swaps 0
Voluntary Context Switches 167
Involuntary Context Switches 11
Block Input Operations 0
Block Output Operations 8
Вы также можете подтвердить это с помощью _tree
варианта, который производит более подробный вариант плана запроса. См. here для получения дополнительной информации о выходе параметров _method
и _tree
.
Некоторые различия между ними возникают, если вы будете направлять планировщик запросов в отношении использования различных алгоритмов присоединиться, однако:
52 /* Method 1: */
53
54 proc sql _method magic=101;
55 select a.*, b.*
56 from data1 as a, data2 as b
57 where a.name1= data2.name2
58 ;
NOTE: PROC SQL planner chooses sequential loop join.
NOTE: SQL execution methods chosen are:
sqxslct
sqxjsl
sqxsrc(WORK.DATA1(alias = A))
sqxsrc(WORK.DATA2(alias = B))
59 quit;
NOTE: PROCEDURE SQL used (Total process time):
real time 0.01 seconds
user cpu time 0.01 seconds
system cpu time 0.01 seconds
memory 5468.53k
OS Memory 32668.00k
Timestamp 09/08/2015 06:41:54 PM
Step Count 451 Switch Count 52
Page Faults 0
Page Reclaims 101
Page Swaps 0
Voluntary Context Switches 182
Involuntary Context Switches 14
Block Input Operations 0
Block Output Operations 8
60 /* Method 2: */
61
62 proc sql _method magic=102;
63 select a.* , b.*
64 from data1 as a inner join data2 as b
65 on a.name1 = b.name2
66 ;
NOTE: PROC SQL planner chooses merge join.
NOTE: SQL execution methods chosen are:
sqxslct
sqxjm
sqxsort
sqxsrc(WORK.DATA1(alias = A))
sqxsort
sqxsrc(WORK.DATA2(alias = B))
67 quit;
NOTE: PROCEDURE SQL used (Total process time):
real time 0.01 seconds
user cpu time 0.01 seconds
system cpu time 0.00 seconds
memory 5467.12k
OS Memory 32924.00k
Timestamp 09/08/2015 06:41:54 PM
Step Count 452 Switch Count 60
Page Faults 0
Page Reclaims 69
Page Swaps 0
Voluntary Context Switches 197
Involuntary Context Switches 13
Block Input Operations 0
Block Output Operations 16
Для получения более подробной информации об опции magic=
см here. Я не рекомендую использовать его в какой-либо производственной среде, но иногда это может быть полезно для такого рода вещей.
Учитывая крошечные различия в времени процессора для файлов, это небольшое даже при принуждении SAS к использованию разных методов слияния, я очень подозреваю, что причиной этого является другой фактор; вероятно, файл html тайны.
Если вы не указали тип соединения, вы используете естественное соединение, а предложение where применяется к результатам. Если вы укажете внутреннее соединение с ON, результаты будут отфильтрованы в процессе соединения. Я уверен, что кто-то еще объяснит это лучше, поэтому я не буду публиковать это как ответ – Reeza
Кроме того, IMO вы всегда должны явно указывать свой тип соединения. – Reeza
Немного больше информации о порядке обработки SQL в SAS. http://blogs.sas.com/content/sastraining/2013/02/04/a-database-professionals-best-friend-2/ – Reeza