Indkesy
SELECT
[Id]
,[Class]
,[PowerLevel]
,[NickName]
,[Adress]
,[CustomCodeAbilityId]
FROM [HeroDataBase].[dbo].[SuperHeroes]
SELECT [Id]
,[Class]
,[PowerLevel]
,[NickName]
,[Adress]
,[CustomCodeAbilityId]
FROM [HeroDataBase].[dbo].[SuperHeroes_NoIndex]
ORDER BY ID DESC
SELECT [MonsterAttackId]
,[AttackType]
,[DamageToTheCityInNumbers]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [AttackType] = 'A' AND
[DamageToTheCityInNumbers] >= 24928
-- SCAN or SEEK
SELECT
SUM([DamageToTheCityInNumbers])
FROM [HeroDataBase].[dbo].[MonsterAttacks]
Group By [AttackType]
-- SCAN
CREATE CLUSTERED INDEX idx_MonsterAttacks_ClusteredALL
on dbo.MonsterAttacks_ClusteredALL
([MonsterAttackId],[MonsterId],[CityId],
[AttackDate],[AttackType],[DamageToTheCityInNumbers])
CREATE CLUSTERED INDEX
idx_MonsterAttacks_ClusteredDamagToTheCity
on dbo.MonsterAttacks_ClusteredDamagToTheCity
(DamageToTheCityInNumbers)
CREATE CLUSTERED INDEX
idx_MonsterAttacks_ClusteredAttackDate
on dbo.MonsterAttacks_ClusteredAttackDate
(AttackDate)
CREATE OR ALTER PROCEDURE [dbo].[InsertMonsterAttacks_ClusteredAttackDate]
AS
INSERT INTO [MonsterAttacks_ClusteredAttackDate]
([MonsterId]
,[CityId]
,[AttackDate]
,[AttackType]
,[DamageToTheCityInNumbers])
VALUES
(1
,1
,GETDATE()
,'T'
,RAND(CHECKSUM(NEWID()))*5000)
CREATE OR ALTER PROCEDURE [dbo].[UpdateRowMonsterAttacks_ClusteredDamagToTheCity]
AS
DECLARE @i INT = FLOOR(RAND(CHECKSUM(NEWID())) * 18008)
UPDATE [dbo].InsertMonsterAttacks_ClusteredDamagToTheCity
SET [DamageToTheCityInNumbers] = RAND(CHECKSUM(NEWID()))*500
WHERE MonsterAttackId = @i;
//C#
using (var conn = new SqlConnection(connectionString))
{
watch.Start();
conn.Open();
for (int i = 0; i < 5000; i++)
{
using (var command = new SqlCommand(insertProcedureName, conn)
{
CommandType = CommandType.StoredProcedure
})
{
command.ExecuteNonQuery();
}
}
}
SELECT OBJECT_NAME(OBJECT_ID) AS TableName,
'Index' =
CASE
WHEN index_id = 0 THEN 'HEAP'
WHEN index_id = 1 THEN 'Clustered index.'
WHEN index_id > 1 THEN 'Nonclustered index'
ELSE 'ERROR'
END,
used_page_count,
reserved_page_count,
row_count
FROM sys.dm_db_partition_stats
WHERE OBJECT_NAME(object_id) IN
(
'MonsterAttacks_ClusteredALL',
'MonsterAttacks_ClusteredAttackDate',
'MonsterAttacks_ClusteredDamagToTheCity',
'MonsterAttacks_ClusteredId'
)
and index_id = 1
WHERE DamageToTheCityInNumbers = 105
WHERE DamageToTheCityInNumbers = 105 AND
CityId = 2
WHERE DamageToTheCityInNumbers > 5000
WHERE DamageToTheCityInNumbers > 5000 AND
CityId = 2
WHERE DamageToTheCityInNumbers > 5000 AND
CityId > 3
WHERE AttackType = 'M' OR AttackType = 'S'
WHERE DamageToTheCityInNumbers > 5000
OR AttackType = 'S'
WHERE DamageToTheCityInNumbers > 5000 OR
CityId > 3
SELECT
F.[DidDefeatMonster],
MA.AttackDate,
M.Name,
M.DisasterLevel
FROM [HeroDataBase].[dbo].[Fight] AS F
INNER JOIN [MonsterAttacks] AS MA ON
MA.MonsterAttackId = F.MonsterAttackId
INNER JOIN [Monster] AS M ON M.IdMonster = MA.MonsterId
SELECT [MonsterAttackId]
,[CityId]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [CityId] = 4
CREATE NONCLUSTERED INDEX
idx_MonsterAttacks_CityId
ON [dbo].[MonsterAttacks](CityId);
SELECT [MonsterAttackId]
,[AttackType]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [AttackType] = 'S';
SELECT [MonsterAttackId]
,[AttackType]
,[CityId]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [AttackType] = 'S' AND [CityId] = 51
SELECT [MonsterAttackId]
,[DamageToTheCityInNumbers]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [DamageToTheCityInNumbers] > 9000
SELECT [MonsterAttackId]
,[DamageToTheCityInNumbers], [CityId]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [DamageToTheCityInNumbers] > 9000 AND [CityId] = 175
SELECT [MonsterAttackId]
,[DamageToTheCityInNumbers], [AttackDate]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [DamageToTheCityInNumbers] > 9000 AND [AttackDate] < '2019-10-02'
SELECT [MonsterAttackId]
,[DamageToTheCityInNumbers], [AttackDate]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [DamageToTheCityInNumbers] > 8000
OR [AttackDate] < '2019-10-10'
SELECT [MonsterAttackId]
,[DamageToTheCityInNumbers], [AttackDate]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [DamageToTheCityInNumbers] = 8000
OR [AttackDate] = '2019-10-10'
SELECT
F.[DidDefeatMonster],
MA.AttackDate,
M.Name,
M.DisasterLevel
FROM [HeroDataBase].[dbo].[Fight] AS F
INNER JOIN [MonsterAttacks] AS MA
ON MA.MonsterAttackId = F.MonsterAttackId
INNER JOIN [Monster] AS M ON M.IdMonster = MA.MonsterId
WHERE M.Name = 'Geryuganshoop'
SELECT
F.[DidDefeatMonster],
MA.AttackDate,
M.Name,
M.DisasterLevel
FROM [HeroDataBase].[dbo].[Fight] AS F
INNER MERGE JOIN [MonsterAttacks] AS MA
ON MA.MonsterAttackId = F.MonsterAttackId
INNER MERGE JOIN [Monster] AS M ON M.IdMonster = MA.MonsterId
WHERE M.Name = 'Geryuganshoop'
SELECT
F.[DidDefeatMonster],
MA.AttackDate,
M.Name,
M.DisasterLevel
FROM [HeroDataBase].[dbo].[Fight] AS F
INNER HASH JOIN [MonsterAttacks] AS MA
ON MA.MonsterAttackId = F.MonsterAttackId
INNER HASH JOIN [Monster] AS M ON M.IdMonster = MA.MonsterId
WHERE M.Name = 'Geryuganshoop'
SELECT [MonsterAttackId]
,[CityId]
,[AttackDate]
,[AttackType]
,[DamageToTheCityInNumbers]
,[IsDone]
,[IsRepaired]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [CityId] = 2487 AND [AttackType] = 'J'
CREATE NONCLUSTERED INDEX idx_test2 ON
[dbo].[MonsterAttacks]([CityId],[AttackType])
SELECT [MonsterAttackId]
,[CityId]
,[AttackDate]
,[AttackType]
,[DamageToTheCityInNumbers]
,[IsDone]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [CityId] = 2487 AND [AttackType] = 'J'
CREATE NONCLUSTERED INDEX idx_test3 ON
[dbo].[MonsterAttacks]([CityId],[AttackType])
INCLUDE([DamageToTheCityInNumbers],[AttackDate],
[MonsterAttackId],[IsDone])
SELECT [MonsterAttackId]
,[CityId]
,[AttackType]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [CityId] = 2487 AND [AttackType] = 'J'
CREATE NONCLUSTERED INDEX idx_Test ON
[dbo].[MonsterAttacks]([CityId])
WHERE [AttackType] = 'J'
DECLARE @CityId INT = 2487,
@AttackType CHAR(1) = 'J'
SELECT [MonsterAttackId]
,[CityId]
,[AttackType]
FROM [HeroDataBase].[dbo].[MonsterAttacks]
WHERE [CityId] = @CityId
AND [AttackType] = @AttackType
CREATE OR ALTER VIEW dbo.MonsterAttacksWithTotals
WITH SCHEMABINDING
AS
SELECT
COUNT_BIG(*) AS NumberOfAttacks,
ma.CityId,
SUM(ma.DamageToTheCityInNumbers) AS TotalDamage,
AVG(ma.DamageToTheCityInNumbers) AS AVGDamage
FROM [dbo].[MonsterAttacks] AS ma
GROUP BY ma.CityId
HAVING COUNT_BIG(*)< 100 AND COUNT_BIG(*) > 2
GO
CREATE UNIQUE CLUSTERED INDEX idx_MonsterAttacksWithTotals
ON dbo.MonsterAttacksWithTotals (CityId);
CREATE OR ALTER VIEW dbo.MonsterAttacksWithTotals
WITH SCHEMABINDING
AS
SELECT
COUNT_BIG(*) AS NumberOfAttacks,
ma.CityId,
SUM(ma.DamageToTheCityInNumbers) AS TotalDamage
FROM [dbo].[MonsterAttacks] AS ma
GROUP BY ma.CityId
GO
CREATE UNIQUE CLUSTERED INDEX idx_MonsterAttacksWithTotals
ON dbo.MonsterAttacksWithTotals (CityId);
CREATE NONCLUSTERED COLUMNSTORE INDEX
[NonClusteredColumnStoreIndex-20201004]
ON [dbo].[MonsterAttacks_ColumnIndex]
(
[MonsterAttackId],
[AttackDate],
[AttackType],
[DamageToTheCityInNumbers]
)
SELECT [Id]
,[Class]
,[PowerLevel]
,[NickName]
,[Adress]
FROM [HeroDataBase].[dbo].[SuperHeroes_ColumnIndex]
SELECT [Id]
,[Class]
,[PowerLevel]
,[NickName]
,[Adress]
FROM [HeroDataBase].[dbo].[SuperHeroes]
SELECT
OBJECT_ID,
index_id,
used_page_count,
reserved_page_count,
row_count,
OBJECT_NAME(OBJECT_ID)
FROM sys.dm_db_partition_stats
WHERE OBJECT_ID = OBJECT_ID('SuperHeroes_ColumnIndex')
OR OBJECT_ID = OBJECT_ID('MonsterAttacks_ColumnIndex');
SELECT OBJECT_NAME(OBJECT_ID),* FROM sys.column_store_row_groups;
INSERT INTO [dbo].[SuperHeroes_ColumnIndex]
([Class]
,[PowerLevel]
,[NickName]
,[Adress])
VALUES
('Y'
,@randompowerlevel
,@randomname
,@randomname2)
DECLARE @i INT = FLOOR(RAND(CHECKSUM(NEWID())) * 18008)
UPDATE [dbo].[SuperHeroes_ColumnIndex]
SET [PowerLevel] = RAND(CHECKSUM(NEWID()))*500
WHERE Id = @i;
DECLARE @j INT = FLOOR(RAND(CHECKSUM(NEWID())) * 18008)
DELETE [dbo].[SuperHeroes_ColumnIndex]
WHERE Id = @j;