папа Карло писал(а):
хммм интересеный момент.

дистинкт очевидно изменяет то, как выводится результат, что не требуется. что еще более интересно, так это по большим таблицам перформанс лечить с помощью дистинкта... можно объяснить каким образом дистинкт повлияет положительно на производительность?
я просто предположила что если таблицы большие и много общих значений, то получится Cartesian query.
из этого примера:
create table t1 (fld char(4))
go
insert into t1 values ('a')
insert into t1 values ('ab')
insert into t1 values ('abc')
insert into t1 values ('abcd')
create table t2 (fld char(4))
go
insert into t2 values ('e')
insert into t2 values ('ek')
insert into t2 values ('abc')
insert into t2 values ('abcd')
сначала сделайте:
select T2.* from t2 T2, t1 T1 where T2.fld = T1.fld
получите 2 записи,
а потом:
insert into t1 values ('abc')
insert into t1 values ('abcd')
insert into t1 values ('abc')
insert into t1 values ('abcd')
insert into t1 values ('abc')
insert into t1 values ('abcd')
и снова
select T2.* from t2 T2, t1 T1 where T2.fld = T1.fld
сколько записей будет в ризалт сет?
а если
select distinct T2.* from t2 T2, t1 T1 where T2.fld = T1.fld
- то снова 2.
вот я просто подумала, что если таблицы большие...
ну а если маленькие, то можно их пересоздать да и все.
Да! еще попробуйте так:
select T2.* from t2 T2 (nolock), t1 T1 (nolock) where T2.fld = T1.fld
может, блокировка есть если еще кто что с базой делает.
Посмотрите какие объекты заблокированы в этот момент, процессорное время именно этого запроса.
а top 1 тоже не выводится?
и еще - есть такая спец. процедура - выводит данные о каждой таблице и ее индексах - как хранятся, скока блоков занимают и процент фрагментации - навскидку не помню - может, кто вспомнит?