Databázy 2 - Prednáška č. 7

Created: 2009-03-31 - 17:01


/*
7. prednáška 
- INDEXY - clusterový (len jeden) a neklusterový (viac)
- kedy dávať: ked stlpec sa nachadza v SELECTe vramci WHERE klauzuly
              na stlpce kde mame FOREIGN KEY
              na stlpce, ktore nie su casto menene
- kedy nedavať: tam kde je casta zmena udajov
                malo rozdielnych hodnot
			    ak je tabulka mala (ale je to jedno v podstate)
			    ked selektujeme viac nez 10 percent riadkov
*/

--priklad na INSERT do indexovanej tabulky
USE tempdb;
SET NOCOUNT on;
GO

IF OBJECT_ID(N'randTab_1ind') IS NOT NULL DROP TABLE randTab_1ind;
GO
-- 1 najprv bez indexu
CREATE TABLE randTab_1ind (
id INT,
rand_x float,
rand_date DATETIME
);
GO
-- 2 a)b)c) najprv indexy a potom vkladat
--toto postupne zakomentovat
--CREATE INDEX ind_rand_x ON randTab_1ind(rand_x)
--CREATE CLUSTERED INDEX ind_rand_date ON randTab_1ind(rand_date)

DECLARE @beg datetime, @end datetime, @dtm datetime;
DECLARE @i INT;
SET @i = 0;

SET @beg = GETDATE();
WHILE @i < 50000
BEGIN
	SET @i = @i + 1;
	INSERT INTO randTab_1ind VALUES (
		@i,
		RAND(),
		CONVERT(DATETIME, 365*101+25+2001*RAND())
	)
END

-- 3 najprv vlozit a potom indexy
--CREATE INDEX ind_rand_x ON randTab_1ind(rand_x)
--CREATE CLUSTERED INDEX ind_rand_date ON randTab_1ind(rand_date)
SET @end = GETDATE();

print DATEDIFF(MILLISECOND, @beg, @end);

--porovnavanim jednotlivych casov vidime aky je medzi tym rozdiel 
-- teda ked insertujeme a potom indexujeme alebo opacne...
-- najprv vlozit a potom indexovat je rychlejsie...