en-USsv-SE

Active Forums

PrevPrev Go to previous topic
NextNext Go to next topic
Last Post 21 Mar 2012 12:18 PM by  HenrikF
SQLug.se challenge 2011
 117 Replies
Sort:
You are not authorized to post a reply.
Page 4 of 6 << < 23456 > >>
Author Messages
HenrikF
New Member
New Member
Posts: 8


--
26 Apr 2011 08:25 AM
Hej!

Här är mitt bidrag nummer 2. Jag representerar Agero.



/****************************

HenrikF / Agero, Bidrag #2

Henrik.af.Forselles@Agero.se

****************************/

-- SETUP

GO

if object_id('[dbo].[HenrikF_NoHints]') is not null

drop procedure [dbo].[HenrikF_NoHints]

GO

create PROCEDURE [dbo].[HenrikF_NoHints]

AS

SELECT PeopleID,main.WantedSetID FROM (

SELECT

PeopleID

,WantedAttribute.WantedSetID

,Count(*) AS MatchingAttributes

FROM PeopleAttribute

INNER JOIN WantedAttribute on PeopleAttribute.AttributeID = WantedAttribute.AttributeID AND PeopleAttribute.AttributeValue = WantedAttribute.AttributeValue

GROUP BY PeopleID,WantedAttribute.WantedSetID

) main

INNER JOIN (

Select WantedSetID,Count(*) as Attributes2Match from WantedAttribute

GROUP BY WantedSetID

) SUB on main.WantedSetID = SUB.wantedSetID and main.MatchingAttributes = SUB.Attributes2Match

GO

-- HUVUDKOD

EXEC [dbo].[HenrikF_NoHints]

-- STäDNING

GO

if object_id('[dbo].[HenrikF_NoHints]') is not null

drop procedure [dbo].[HenrikF_NoHints]

GO

HenrikF
New Member
New Member
Posts: 8


--
26 Apr 2011 09:21 AM
Här kommer mitt tredje bidrag. Skillnaden från mitt bidrag #2 är att jag här skapar ett index för att hjälpa SP:n lite.
Frågan är ju huruvida tiden det tar att köra setupscriptet räknas in i den totala tiden eller inte...? Det framgår inte riktigt så detta är ju en chansning.


/****************************

HenrikF från Agero, Bidrag #3
Henrik.af.Forselles@Agero.se

****************************/




-- SETUP.

GO
IF NOT EXISTS (SELECT name FROM sysindexes WHERE name = 'HenrikF3_index')
BEGIN
CREATE NONCLUSTERED INDEX [HenrikF3_index]
ON [dbo].[PeopleAttribute] ([AttributeValue])
INCLUDE ([PeopleID],[AttributeID])
END
GO

GO
if object_id('[dbo].[HenrikF3_NoHints]') is not null
drop procedure [dbo].[HenrikF3_NoHints]
GO



create PROCEDURE [dbo].[HenrikF3_NoHints]

AS

SELECT PeopleID,main.WantedSetID FROM (
SELECT
PeopleID
,WantedAttribute.WantedSetID
,Count(*) AS MatchingAttributes
FROM PeopleAttribute
INNER JOIN WantedAttribute on PeopleAttribute.AttributeID = WantedAttribute.AttributeID AND PeopleAttribute.AttributeValue = WantedAttribute.AttributeValue
GROUP BY PeopleID,WantedAttribute.WantedSetID

) main
INNER JOIN (
Select WantedSetID,Count(*) as Attributes2Match from WantedAttribute
GROUP BY WantedSetID
) SUB on main.WantedSetID = SUB.wantedSetID and main.MatchingAttributes = SUB.Attributes2Match
GO


-- HUVUDKOD

EXEC [dbo].[HenrikF3_NoHints]




-- STäDNING
GO
if object_id('[dbo].[HenrikF3_NoHints]') is not null
drop procedure [dbo].[HenrikF3_NoHints]
GO
IF EXISTS (SELECT name FROM sysindexes WHERE name = 'HenrikF3_index') DROP INDEX PeopleAttribute.HenrikF3_index
SwePeso
New Member
New Member
Posts: 67


--
26 Apr 2011 09:34 AM
Två nya bidrag men ingen ändring i ställningen



*************************************************

* # * Förslag * Företag *

*************************************************

* 0 * Peso * *

* 1 * Göran Rönnbäck 2 * SQL Service *

* 2 * Martin Höglund * Bring Citymail *

* 2 * Eddan 1 * *

* 2 * Joel Greijer 1 * Releye AB *

* 5 * Christian 1 * *

* 5 * Per Scheffer 2a * Bizware *

* 5 * Per Scheffer 2b * Bizware *

* 5 * Peter Abelsson 1 * H & M *

* 5 * Zhong 3 * B3IT *

* 5 * Lars Gråmark 1 * *

* 5 * Henrik F 1 * Agero *

* 5 * Patrik Molin 1 * Affecto *

* 13 * Zhong 2 * B3IT *

* 14 * Henrik F 2 * Agero *

* 15 * Jonas Bergström 1 * SQL Service *

* 16 * Per Scheffer 1 * Bizware *

* 17 * Göran Rönnbäck 1 * SQL Service *

* 18 * Zhong 4 * B3IT *

* 19 * Malin D 1 * Affecto *

* 20 * Zhong 1 * B3IT *

* * Malin D 2 * Affecto *

*************************************************



Peter Abelsson
New Member
New Member
Posts: 3


--
29 Apr 2011 02:49 PM
Buggfixade min CLR lösning lite, den klarade inte fallet då WantedAttribute var tom. Nu ska den klara det också.

http://dl.dropbox.com/u/25457851/sq...r_A_2a.zip

//Peter
Peter Abelsson
New Member
New Member
Posts: 3


--
29 Apr 2011 02:49 PM
Buggfixade min CLR lösning lite, den klarade inte fallet då WantedAttribute var tom. Nu ska den klara det också.

http://dl.dropbox.com/u/25457851/sq...r_A_2a.zip

//Peter
SRL
New Member
New Member
Posts: 2


--
04 May 2011 09:21 AM

--============================================================================================
-- SETUP
----------------------------------------------------------------------------------------------
-- Author : Stefan Logosz / Corementis
--============================================================================================
if exists ( select * from sysobjects where xtype = 'v' and name = 'PeopleCriteriasMet_VW' )
drop view PeopleCriteriasMet_VW
go
create view [dbo].[PeopleCriteriasMet_VW]
as
select
T2.PeopleID
, T1.WantedSetID
, count(*) as CriteriasMet
from dbo.WantedAttribute as T1
join dbo.PeopleAttribute as T2
on T1.AttributeID = T2.AttributeID
and T1.AttributeValue = T2.AttributeValue
group by
T2.PeopleID
, T1.WantedSetID
go

if exists ( select * from sysobjects where xtype = 'v' and name = 'WantedAttributeCriterias_VW' )
drop view WantedAttributeCriterias_VW
go
create view [dbo].[WantedAttributeCriterias_VW]
as
select
WantedSetID
, count(*) as NoRequiredCriterias
from dbo.WantedAttribute
group by WantedSetID
go

if exists ( select * from sysobjects where xtype = 'v' and name = 'Solution1_VW' )
drop view Solution1_VW
go
create view [dbo].[Solution1_VW]
as
select
T1.PeopleID
, T2.WantedSetID
from PeopleCriteriasMet_VW as T1
join WantedAttributeCriterias_VW as T2
on T1.WantedSetID = T2.WantedSetID
and T1.CriteriasMet = T2.NoRequiredCriterias
go

if exists ( select * from sysindexes where name = 'IX1_PeopleAttribute' )
drop index PeopleAttribute.IX1_PeopleAttribute
go
create nonclustered index [IX1_PeopleAttribute] on [dbo].[PeopleAttribute]
([AttributeValue] asc) INCLUDE ( [PeopleID],[AttributeID])
go

if exists ( select * from sysindexes where name = 'IX2_PeopleAttribute' )
drop index PeopleAttribute.IX2_PeopleAttribute
go
create nonclustered index [IX2_PeopleAttribute] on [dbo].[PeopleAttribute]
([AttributeID] ASC, [AttributeValue] ASC) INCLUDE ( [PeopleID])
go




--============================================================================================
-- Main
----------------------------------------------------------------------------------------------
-- Author : Stefan Logosz / Corementis
--============================================================================================

select * from dbo.Solution1_VW
go


--============================================================================================
-- CLEANUP
----------------------------------------------------------------------------------------------
-- Author : Stefan Logosz / Corementis
--============================================================================================
if exists ( select * from sysobjects where xtype = 'v' and name = 'PeopleCriteriasMet_VW' )
drop view PeopleCriteriasMet_VW
go
if exists ( select * from sysobjects where xtype = 'v' and name = 'WantedAttributeCriterias_VW' )
drop view WantedAttributeCriterias_VW
go
if exists ( select * from sysobjects where xtype = 'v' and name = 'Solution1_VW' )
drop view Solution1_VW
go
if exists ( select * from sysindexes where name = 'IX1_PeopleAttribute' )
drop index PeopleAttribute.IX1_PeopleAttribute
go
if exists ( select * from sysindexes where name = 'IX2_PeopleAttribute' )
drop index PeopleAttribute.IX2_PeopleAttribute
go





Mvh Stefan Logosz / Corementis




SwePeso
New Member
New Member
Posts: 67


--
04 May 2011 11:24 AM
En ny tävlande, Stefan Logosz from Corementis har lämnat ett bidrag.



*************************************************

* # * Förslag * Företag *

*************************************************

* 0 * Peso * *

* 1 * Göran Rönnbäck 2 * SQL Service *

* 2 * Martin Höglund * Bring Citymail *

* 2 * Eddan 1 * *

* 2 * Joel Greijer 1 * Releye AB *

* 5 * Stefan Logosz 1 * Corementis *

* 5 * Christian 1 * *

* 5 * Per Scheffer 2a * Bizware *

* 5 * Per Scheffer 2b * Bizware *

* 5 * Peter Abelsson 1 * H & M *

* 5 * Zhong 3 * B3IT *

* 5 * Lars Gråmark 1 * *

* 5 * Henrik F 1 * Agero *

* 5 * Patrik Molin 1 * Affecto *

* 14 * Zhong 2 * B3IT *

* 15 * Henrik F 2 * Agero *

* 16 * Jonas Bergström 1 * SQL Service *

* 17 * Per Scheffer 1 * Bizware *

* 18 * Göran Rönnbäck 1 * SQL Service *

* 19 * Zhong 4 * B3IT *

* 20 * Malin D 1 * Affecto *

* 21 * Zhong 1 * B3IT *

* * Malin D 2 * Affecto *

*************************************************


Jesus
New Member
New Member
Posts: 7


--
04 May 2011 03:13 PM
Hej på Er!

Första gången jag lägger i något.
Har bilivit uppmanad av en kompis och trots att jag bara är en .NET-utvecklare antog jag utmaningen.
Bara kul om jag får vara med och lära mig nya saker!
Nu har jag förberett en ZIP-fil med alla mina skript men ser ingen knapp för att ladda upp filer.
Undrar hur jag postar mitt bidrag.

Mvh
Jesús
Jesus
New Member
New Member
Posts: 7


--
04 May 2011 03:13 PM
Hej på Er!

Första gången jag lägger i något.
Har bilivit uppmanad av en kompis och trots att jag bara är en .NET-utvecklare antog jag utmaningen.
Bara kul om jag får vara med och lära mig nya saker!
Nu har jag förberett en ZIP-fil med alla mina skript men ser ingen knapp för att ladda upp filer.
Undrar hur jag postar mitt bidrag.

Mvh
Jesús
Göran
New Member
New Member
Posts: 11


--
04 May 2011 07:33 PM
Hej !

Här kommer min tredje variant.

Mvh/
Göran Rönnbäck

1. Setup

CREATE NONCLUSTERED INDEX [IX_WantedAttribute_AttributeValue] ON [dbo].[WantedAttribute]

(

[AttributeValue] ASC

)

INCLUDE ( [WantedSetID],

[AttributeID]) WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [PRIMARY]

GO

CREATE NONCLUSTERED INDEX [IX_PeopleAttribute_AttributeValue] ON [dbo].[PeopleAttribute]

(

[AttributeValue] ASC

)

INCLUDE ( [PeopleID],

[AttributeID]) WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [PRIMARY]

GO

CREATE VIEW [dbo].[qryWanted_count]

WITH SCHEMABINDING

AS

SELECT WantedSetID, COUNT(*) AS Wanted_count

FROM dbo.WantedAttribute

WHERE EXISTS

(

SELECT AttributeID, AttributeValue

FROM dbo.PeopleAttribute

WHERE PeopleAttribute.AttributeID = WantedAttribute.AttributeID

AND PeopleAttribute.AttributeValue = WantedAttribute.AttributeValue

)

GROUP BY WantedSetID

GO

CREATE VIEW [dbo].[qryPeople_count]

WITH SCHEMABINDING

AS

SELECT PeopleID, COUNT(*) AS People_count

FROM dbo.PeopleAttribute

WHERE EXISTS

(

SELECT AttributeID, AttributeValue

FROM dbo.WantedAttribute

WHERE PeopleAttribute.AttributeID = WantedAttribute.AttributeID

AND PeopleAttribute.AttributeValue = WantedAttribute.AttributeValue

)

GROUP BY PeopleID

GO

CREATE PROCEDURE [dbo].[SQLUG_GetRows_GR3]

AS

/*

DBCC DROPCLEANBUFFERS

DBCC FREEPROCCACHE

EXEC [dbo].[SQLUG_GetRows_GR3]

*/

SET NOCOUNT ON

SELECT PeopleID, WantedSetID

FROM dbo.qryPeople_count

CROSS JOIN dbo.qryWanted_count

WHERE People_count >= Wanted_count

GO

2. Exekveringsdel

EXEC [dbo].[SQLUG_GetRows_GR3]

3. Cleanup

IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[WantedAttribute]') AND name = N'IX_WantedAttribute_AttributeValue')

DROP INDEX [IX_WantedAttribute_AttributeValue] ON [dbo].[WantedAttribute] WITH ( ONLINE = OFF )

GO

IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[PeopleAttribute]') AND name = N'IX_PeopleAttribute_AttributeValue')

DROP INDEX [IX_PeopleAttribute_AttributeValue] ON [dbo].[PeopleAttribute] WITH ( ONLINE = OFF )

GO

IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[qryWanted_count]'))

DROP VIEW [dbo].[qryWanted_count]

GO

IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[qryPeople_count]'))

DROP VIEW [dbo].[qryPeople_count]

GO

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SQLUG_GetRows_GR3]') AND type in (N'P', N'PC'))

DROP PROCEDURE [dbo].[SQLUG_GetRows_GR3]

GO


Göran
New Member
New Member
Posts: 11


--
04 May 2011 07:33 PM
Hej !

Här kommer min tredje variant.

Mvh/
Göran Rönnbäck

1. Setup

CREATE NONCLUSTERED INDEX [IX_WantedAttribute_AttributeValue] ON [dbo].[WantedAttribute]

(

[AttributeValue] ASC

)

INCLUDE ( [WantedSetID],

[AttributeID]) WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [PRIMARY]

GO

CREATE NONCLUSTERED INDEX [IX_PeopleAttribute_AttributeValue] ON [dbo].[PeopleAttribute]

(

[AttributeValue] ASC

)

INCLUDE ( [PeopleID],

[AttributeID]) WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [PRIMARY]

GO

CREATE VIEW [dbo].[qryWanted_count]

WITH SCHEMABINDING

AS

SELECT WantedSetID, COUNT(*) AS Wanted_count

FROM dbo.WantedAttribute

WHERE EXISTS

(

SELECT AttributeID, AttributeValue

FROM dbo.PeopleAttribute

WHERE PeopleAttribute.AttributeID = WantedAttribute.AttributeID

AND PeopleAttribute.AttributeValue = WantedAttribute.AttributeValue

)

GROUP BY WantedSetID

GO

CREATE VIEW [dbo].[qryPeople_count]

WITH SCHEMABINDING

AS

SELECT PeopleID, COUNT(*) AS People_count

FROM dbo.PeopleAttribute

WHERE EXISTS

(

SELECT AttributeID, AttributeValue

FROM dbo.WantedAttribute

WHERE PeopleAttribute.AttributeID = WantedAttribute.AttributeID

AND PeopleAttribute.AttributeValue = WantedAttribute.AttributeValue

)

GROUP BY PeopleID

GO

CREATE PROCEDURE [dbo].[SQLUG_GetRows_GR3]

AS

/*

DBCC DROPCLEANBUFFERS

DBCC FREEPROCCACHE

EXEC [dbo].[SQLUG_GetRows_GR3]

*/

SET NOCOUNT ON

SELECT PeopleID, WantedSetID

FROM dbo.qryPeople_count

CROSS JOIN dbo.qryWanted_count

WHERE People_count >= Wanted_count

GO

2. Exekveringsdel

EXEC [dbo].[SQLUG_GetRows_GR3]

3. Cleanup

IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[WantedAttribute]') AND name = N'IX_WantedAttribute_AttributeValue')

DROP INDEX [IX_WantedAttribute_AttributeValue] ON [dbo].[WantedAttribute] WITH ( ONLINE = OFF )

GO

IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[PeopleAttribute]') AND name = N'IX_PeopleAttribute_AttributeValue')

DROP INDEX [IX_PeopleAttribute_AttributeValue] ON [dbo].[PeopleAttribute] WITH ( ONLINE = OFF )

GO

IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[qryWanted_count]'))

DROP VIEW [dbo].[qryWanted_count]

GO

IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[qryPeople_count]'))

DROP VIEW [dbo].[qryPeople_count]

GO

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SQLUG_GetRows_GR3]') AND type in (N'P', N'PC'))

DROP PROCEDURE [dbo].[SQLUG_GetRows_GR3]

GO


Choco
New Member
New Member
Posts: 3


--
07 May 2011 02:37 PM
Hej
Min första Försök till lösning (skripts nedan)
mvh
Lachlan (Sony Ericsson)


-- Setup
CREATE NONCLUSTERED INDEX [MatchIndex] ON [dbo].[PeopleAttribute]
(
[AttributeID] ASC,
[AttributeValue] ASC,
[PeopleID] ASC
)

-- Huvudkod

select WantedSetID,PeopleID
from WantedAttribute w
inner join PeopleAttribute p on p.AttributeID = w.AttributeID and p.AttributeValue = w.AttributeValue
group by PeopleID,WantedSetID
having COUNT(*) = (select COUNT(WantedSetID)
from WantedAttribute
where WantedSetID = w.WantedSetID
group by WantedSetID)





-- Uppstädning
DROP INDEX [MatchIndex] ON [dbo].[PeopleAttribute]
SRL
New Member
New Member
Posts: 2


--
09 May 2011 09:32 AM

Hej

är lite nyfiken på testet och har givetvis lite frågor&hellip;

Testerna förutsätter jag körs ett par gånger så att medelvärdet av tiderna räknas som lösningens tid samt att det körs på en server och inte en laptop? Anledningen till min fråga är tiden och skalning? Om jag förstått det korrekt så klockar den bästa tiden på 18-20s och genererar ett resultat på 281 625 rader.

Jag har läst att ni skrev att testet skall köras på en server, men tiderna som ni presenterat än så länge, är även de körda på servern? (Eftersom allt är preliminärt&hellip;)

Jag har själv testat på en server med 16 kärnor (8 fysiska + 8 via hyperthreading) och 48 GB RAM. Där min lösning genererar runt 900 000 rader på 4s. Känner jag er rätt så har ni givetvis skapat problemdata för oss tävlande :) men huvudanledningen till frågan är att jag givetvis testat på min laptop med samma data och får en helt annan skalning på lösningen om jag jämför frågan på ett multicpu system mot ett singelcpu system.

Angående testdata, det tog nog inte mer än 5-10 minuter att hitta en lösning men beroende lite på hur data och WantedSet tabellen ser ut så finns det olika alternativ som genererar olika svarsresultat. Dvs, en lösning som fungerar med många WantedSet kan vara betydligt långsammare än en med väldigt få WantedSet. Finns det någon verklighetsanknytning till hur testdata är skapat plus hur lösningen är tänkt att användas? Det kan även vara intressant att veta vilken version och patchnivå av SQL Server som ni kör testerna på.

Hoppas man får loss en eller några timmar innan den 26th så man hinner återkomma med något bättre!

Mvh // Stefan

SwePeso
New Member
New Member
Posts: 67


--
09 May 2011 11:37 AM
Jag fick nyligen ett mail från en användare som önskade vissa förtydlingar och jag ska försöka skingra dessa frågetecken.



Servern som används till testerna är SQL Server 2000R2 version 10.50.1765. Den har två quadcore processorer med hyperthreading påslaget, dvs totalt 16 cores.

Både operativsystem och SQL Server är 64 bitars. Databasinstansen har 40GB satt till både MIN och MAX minnestilldelning. "Lock pages in memory" är aktiverat. Diskarna ligger på i RAID10 på ett HP SAN.



Det finns totalt 10 olika tabeller för att enhetstesta bidragen med. Vissa tabeller har ganska enkla uppsättningar av attribut och vissa har enbart edge-cases.

Jag använder synonymer för att skifta mellan de olika tabellerna.



Det slutliga tabellerna som jag testar mot är en kopia av två tabeller tagna från vår produktionsmiljö de senaste 18 månaderna. Detta för att få en verklig och realistisk spridning av data.



Jag fick t.ex in lösning i helgen som verkligen satte rekord på den stora tabellen med en runtime på 1.5 sekunder, vilket är mångfalt snabbare än den accepterade snabbaste lösningen. Däremot var den tre gånger så långsam på en av de mindre uppsättningarna tabeller för enhetstest. Det lustiga är att den gav rätt resultat på den stora tabellen men fel resultat på en av de minsta enhetstestera med bara en person och en wantedset.

Choco
New Member
New Member
Posts: 3


--
09 May 2011 02:42 PM
Hi

Sorry for the English.

I submitted on the weekend and am thinking perhaps you are referring to me in the latest post?
If so please keep reading :)

I have extended my tested to include about 14 different single test set data and I can't reproduce an error, I am unsure what I am doing wrong.
Is it posible to post the failing data sets?


Unsure about the unit test being slower, I have some theories but most revovle around small data, low huvud kod runs, massive amount of memory allowing entire page loads for the table :)

I have slightly modified the earlier version posted version to see if it helps with the failing data set.

Cheers
Lachlan


-- Setup
-- cost returns after regained after approximately 8 runs and tables large enough table not to be fully paged into memory.
CREATE NONCLUSTERED INDEX [MatchIndex] ON [dbo].[PeopleAttribute]
(
[AttributeID] ASC,
[AttributeValue] ASC,
[PeopleID] ASC
)


-- Huvudkod (v2 with FK constraints (approx 5% CPU hit))
select p.PeopleID, w.WantedSetID --, COUNT(*)
from WantedAttribute w
inner join PeopleAttribute p on p.AttributeID = w.AttributeID and p.AttributeValue = w.AttributeValue
inner join People pe on pe.PeopleId = p.PeopleId
inner join Attribute a on a.AttributeID = w.AttributeID
group by p.PeopleID, w.WantedSetID
having COUNT(*) = (select COUNT(WantedSetID)
from WantedAttribute
inner join Attribute on Attribute.AttributeID = WantedAttribute.AttributeID
where WantedSetID = w.WantedSetID
group by WantedSetID)



-- Uppstädning
DROP INDEX [MatchIndex] ON [dbo].[PeopleAttribute]
Göran
New Member
New Member
Posts: 11


--
09 May 2011 06:57 PM
Hej !

Hur kommer det sig att mitt inlägg är synligt ? Skulle ju inte vara så enligt Johan. Det avslöjar ju delvis min lösning.

Mvh/
Göran
Göran
New Member
New Member
Posts: 11


--
09 May 2011 06:57 PM
Hej !

Hur kommer det sig att mitt inlägg är synligt ? Skulle ju inte vara så enligt Johan. Det avslöjar ju delvis min lösning.

Mvh/
Göran
Henrik Nilsson
New Member
New Member
Posts: 9


--
09 May 2011 10:15 PM
Det vore intressant att se den relativa körtiden bidragen i mellan.

/Henrik
Jesus
New Member
New Member
Posts: 7


--
12 May 2011 10:20 PM
Hej,
Har tidigare mejlat in koden men har inte hört något.
Gör ett till försök här.
Hälsningar
Jesús Reina Carvajal





-- SETUP
if exists (select * from sys.views where object_id = object_id(N'dbo.AttributeLookup'))
drop view dbo.AttributeLookup
GO
create view dbo.AttributeLookup
as
select
WantedSetID
,AttributeID
,AttributeValue
,count(*) over (partition by WantedSetID) as RowsInGroup
from
dbo.WantedAttribute
group by
AttributeID
,WantedSetID
,AttributeValue
GO



if exists (select * from sys.views where object_id = object_id(N'dbo.PeopleLookup'))
drop view dbo.PeopleLookup
GO
create view dbo.PeopleLookup
as
select
PeopleID
,AttributeID
,AttributeValue
--,count(*) over (partition by PeopleID) as RowsInGroup
from
dbo.PeopleAttribute
where
PeopleAttributeID > 0
GO





if exists (select * from sys.objects where object_id = object_id(N'dbo.SearchPeopleMatches') and type in (N'P', N'PC'))
drop procedure dbo.SearchPeopleMatches
GO
create procedure dbo.SearchPeopleMatches
as
begin
set nocount on

select
pl.PeopleID
,al.WantedSetID
from
dbo.PeopleLookup pl
join
dbo.AttributeLookup al
on
pl.AttributeID = al.AttributeID
where
pl.AttributeValue = al.AttributeValue
group by
pl.PeopleID
,al.WantedSetID
,al.RowsInGroup
having
count(*) >= al.RowsInGroup
order by
pl.PeopleID
,al.WantedSetID
end
GO






-- MAIN
exec dbo.SearchPeopleMatches









-- CLEANUP
if exists (select * from sys.objects where object_id = object_id(N'dbo.SearchPeopleMatches') and type in (N'P', N'PC'))
drop procedure dbo.SearchPeopleMatches
GO
if exists (select * from sys.views where object_id = object_id(N'dbo.AttributeLookup'))
drop view dbo.AttributeLookup
GO
if exists (select * from sys.views where object_id = object_id(N'dbo.PeopleLookup'))
drop view dbo.PeopleLookup
GO
SwePeso
New Member
New Member
Posts: 67


--
13 May 2011 07:19 AM
Från och med nu kommer vi att presentera de individuella tiderna med.

Men det kommer att dröja några dagar till.







Jag fick en dotter i onsdags. Hon vägde 3905 gram och var 51 cm lång.

Både hon och mamman mår bra.



http://www.helsingborgslasarett.se/...07243.html

You are not authorized to post a reply.
Page 4 of 6 << < 23456 > >>