Hej igen !
Här kommer mitt sista bidrag, GR18.
Mvh/
Göran Rönnbäck, SQL Service.
1. Setup
CREATE NONCLUSTERED INDEX [IX_PeopleAttribute_ID_Value] ON [dbo].[PeopleAttribute]
(
[AttributeID] ASC,
[AttributeValue] ASC
)
INCLUDE ( [PeopleID]) 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_WantedAttribute_ID_Value] ON [dbo].[WantedAttribute]
(
[AttributeID] ASC,
[AttributeValue] ASC
)
INCLUDE ( [WantedSetID]) 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].[qryWantedPeople18]
WITH SCHEMABINDING
AS
SELECT w.WantedSetID, p.PeopleID, COUNT(*) AS qryWantedPeople_Count
FROM dbo.WantedAttribute w (TABLOCK)
CROSS APPLY (
SELECT PeopleID
FROM dbo.PeopleAttribute (TABLOCK)
WHERE w.AttributeID = AttributeID
AND w.AttributeValue = AttributeValue
-- AND ASCII(w.AttributeValue) = ASCII(AttributeValue)
) AS p
GROUP BY w.WantedSetID, p.PeopleID
GO
CREATE PROCEDURE [dbo].[SQLUG_GetRows_GR18]
AS
/*
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
EXEC [dbo].[SQLUG_GetRows_GR18]
*/
SET NOCOUNT ON
SELECT People.PeopleID, People.WantedSetID
FROM qryWantedPeople15 People (TABLOCK)
WHERE People.qryWantedPeople_Count =
(
SELECT COUNT(*) AS Count_WantedSetID
FROM [dbo].[WantedAttribute] Wanted (TABLOCK)
WHERE Wanted.WantedSetID = People.WantedSetID
GROUP BY [WantedSetID]
)
OPTION (LOOP JOIN, MAXDOP 0);
GO
2. Exekveringsdel
EXEC [dbo].[SQLUG_GetRows_GR18]
3. Cleanup
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[PeopleAttribute]') AND name = N'IX_PeopleAttribute_ID_Value')
DROP INDEX [IX_PeopleAttribute_ID_Value] ON [dbo].[PeopleAttribute] WITH ( ONLINE = OFF )
GO
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[WantedAttribute]') AND name = N'IX_WantedAttribute_ID_Value')
DROP INDEX [IX_WantedAttribute_ID_Value] ON [dbo].[WantedAttribute] WITH ( ONLINE = OFF )
GO
IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[qryWantedPeople18]'))
DROP VIEW [dbo].[qryWantedPeople18]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SQLUG_GetRows_GR18]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[SQLUG_GetRows_GR18]
GO