|
indexi
-
10-19-2006, 10:39 AM |
-
cretzu
-
-
-
Joined on 10-11-2006
-
Cluj Napoca
-
db_owner
-
-
|
Salut, Imi poate cineva explica care este diferenta intre clustered index si non-clustered index, si in ce context ii putem folosi ? Multumesc, Daniel
MCP (C Sharp) Software Engineer, Cluj Napoca
|
|
-
10-19-2006, 10:47 AM |
-
xmldeveloper
-
-
-
Joined on 01-18-2006
-
Bucharest, Romania
-
Rank NA
-
-
|
Un index este o structura B-Tree (un arbore balansat). Clustered inseamna ca toata tabela este organizata dupa index (sa zicem cartea de telefoane indexata clustered dupa nr pagina) si non-clustered o structura separata (gen index de cuvinte de la sfarsitul unei carti - backup pg 2, pg 34 trigger pg 15, pg 56 etc). Continuarea aici: Index Basics
Cristian Andrei Lefter, SQL Server MVP MCT, MCSA, MCDBA, MCAD, MCSD .NET, MCTS, MCITP - Database Administrator SQL Server 2005 http://sqlserver.ro
|
|
-
10-24-2006, 4:28 PM |
-
cretzu
-
-
-
Joined on 10-11-2006
-
Cluj Napoca
-
db_owner
-
-
|
As dori sa va mai intreb cum as putea crea un index, I1 on colomns (l_shipdate, l_returnflag, l_linestatus, l_quantity) hash partitioned on (l_returnflag, l_linestatus). Daca poate cine sa ma ajute cu ceva linii de cod ... ar fi supper. Ce am incercat si mi-a reusit a fost sa creez un index, partitionat range dupa l_shipdate. Aici am creat o functie de partitionare care sa aibe ca si tip de date datetime, o schema de partitionare folosind un singur filegroup pentru toate partitiile create de functie, si apoi un clustered index pe acea schema. Problema este ca aceasta este o partitionare range, cum se poate face cea de mai sus, adica o partitionare hash dupa coloanele (l_returnflag, l_linestatus). CREATE PARTITION FUNCTION SalesPFN(datetime) AS RANGE LEFT FOR VALUES ('20041001') GO CREATE PARTITION SCHEME [SalesPScheme] AS PARTITION SalesPFN ALL TO ([PRIMARY]) GO CREATE CLUSTERED INDEX CI_INDEX_ANUNIV_SECTIA_DATA_NOTA_DUB ON [dbo].[Sales]( [ l_returnflag] ASC, [l_linestatus] ASC, [l_shipdate] ASC, [l_quantity] ASC ) WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [SalesPScheme]( [l_shipdate] )
Sper ca m-am explicat destul de clar. Merci mult, Daniel S.
MCP (C Sharp) Software Engineer, Cluj Napoca
|
|
-
10-24-2006, 5:12 PM |
-
ggciubuc
-
-
-
Joined on 03-18-2006
-
Bucharest
-
sysadmin
-
-
|
It is a dream, wake up! La Oracle se pot face partitii hash (si nu numai) aicea mai asteptam!
Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
|
|
-
10-24-2006, 6:36 PM |
-
xmldeveloper
-
-
-
Joined on 01-18-2006
-
Bucharest, Romania
-
Rank NA
-
-
|
Din pacate nu hash partition nu reprezinta nimic pentru mine (nu cunosc tehnologia Oracle) insa ce vreti sa realizati? Din cate stiu puteti obtine ceva similar si cu range partition: De exemplu daca aveti coloana PersonID INT puteti adauga o coloana calculata persistata avand urmatoarea definitie: PartitionKey AS (PersonID % 10) PERSISTED Puteti face partitonarea pe PartitionKey.
Cristian Andrei Lefter, SQL Server MVP MCT, MCSA, MCDBA, MCAD, MCSD .NET, MCTS, MCITP - Database Administrator SQL Server 2005 http://sqlserver.ro
|
|
-
10-24-2006, 7:19 PM |
-
ggciubuc
-
-
-
Joined on 03-18-2006
-
Bucharest
-
sysadmin
-
-
|
Da, se poate emula si obtine o partitie de tip hash insa trebuie sa ai grija ce fel de functie hash folosesti: pentru ca functia hash impartire modulo 10 scoate partitiile <0, 0-1,1-2, ..., 7-8,>8 adica vreo 10 partitii daca nu gresesc; asta inseamna 10 filegroup-uri. Aici http://whatis.techtarget.com/definition/0,289893,sid9_gci212230,00.html se da , pe langa o explicatie exacta a ceea ce inseamna hashing, (pentru cine nu stie ) , si o lista de functii hash simple (una a folosit-o Cristi). Parerea mea e ca nu trebuie sa fortam limitele atinse de SQL in zona de partitii, nu ne ramane decat sa modelam corespunzator problema folosirii partitiilor.
Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
|
|
-
10-24-2006, 9:05 PM |
-
xmldeveloper
-
-
-
Joined on 01-18-2006
-
Bucharest, Romania
-
Rank NA
-
-
|
Alta solutie ar fi o coloana calculata persistata folosind functia HashBytes.
Cristian Andrei Lefter, SQL Server MVP MCT, MCSA, MCDBA, MCAD, MCSD .NET, MCTS, MCITP - Database Administrator SQL Server 2005 http://sqlserver.ro
|
|
-
10-24-2006, 9:14 PM |
-
ggciubuc
-
-
-
Joined on 03-18-2006
-
Bucharest
-
sysadmin
-
-
|
Trebuie sa fii atent ce scoate functia hash pt ca rezultatele desemneaza bornele prestabilite, discrete pentru partitii; de exemplu HashBytes ( '<algorithm>', { @input | 'input' } ) cate valori scoate, ca dupa astea, se construiesc partitiile in ss 2005 ?
Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
|
|
-
10-24-2006, 9:52 PM |
-
ggciubuc
-
-
-
Joined on 03-18-2006
-
Bucharest
-
sysadmin
-
-
|
Dupa exemplul lor DECLARE @HashThis nvarchar(max); SELECT @HashThis = CONVERT(nvarchar,'dslfdkjLK85kldhnv$n000#knf'); SELECT HashBytes('SHA1', @HashThis); Apar urmatoarele rezultate: --SHA1 --0x61E00587A759D7009F4C3A46C14E32FD3E11FB43 --SHA --0x61E00587A759D7009F4C3A46C14E32FD3E11FB43 --MD5 --0x8FE2945A258B416B9F98D424E69DAE23 --MD4 --0xB9F6E8D0C1CD6B78CE79BF0CD099C60C --MD2 --0xC93EE95343C6D0A002AF80B94503E6AF iar DECLARE @HashThis nvarchar(max); SELECT @HashThis = CONVERT(nvarchar,'Gigi'); SELECT HashBytes('SHA1', @HashThis); --SHA1 0x78E63717D95939ED46C5347E9DAC9CBEF2D6B29F
Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
|
|
-
10-25-2006, 8:35 AM |
-
cretzu
-
-
-
Joined on 10-11-2006
-
Cluj Napoca
-
db_owner
-
-
|
Va multumesc mult amandorura pentru raspunsuri si pentru promptitudine. O sa iau ca atare. Am citit niste articole si de acolo a venit chestia de partitionare hash (ma pregatesc petnru un referat la doctorat). Evident ca inainte de a pune pe forum intrebarea am scotocit bine SQL Server dar cum nu am gasit am zis ca poate exista dar nu am gasit eu. Oricum o sa emulez partitionarea hash pentru ca sa vad ce rezultate am . Daniel S.
MCP (C Sharp) Software Engineer, Cluj Napoca
|
|
-
10-25-2006, 11:25 AM |
-
cretzu
-
-
-
Joined on 10-11-2006
-
Cluj Napoca
-
db_owner
-
-
|
Deci sa inteleg ca o partitionare hash ar putea sa fie ca ceva de genu: --------------------------------------------------
--modificarea
structurii tabelului pentru a permite inserarea unei coloane,
--calculata
folosind o functie de hash simpla pe coloanele SECTIA si ANUNIV
--------------------------------------------------
ALTER TABLE Studenti_Note_Dub
ADD HashResult INT
GO
--------------------------------------------------
--
trebuie sa calculam rezultatul functie hash definita mai jos
--
rezultat ce tebuie sa fie retinut in HashResult
--------------------------------------------------
UPDATE
Studenti_Note_Dub SET HashResult =
(CAST(SECTIA AS INT) + CAST(ANUNIV AS INT)) % 2
GO
--------------------------------------------------
--
definim functia si schema de partitionare in functie de coloana HashResult
--------------------------------------------------
CREATE PARTITION FUNCTION
EvidScolStudentiNoteDubHASHPFN(INT)
AS
RANGE LEFT FOR VALUES (0, 1)
GO
--------------------------------------------------
--
schema este
--------------------------------------------------
CREATE PARTITION SCHEME
[EvidScolStudentiNoteDubHASHPScheme]
AS
PARTITION
EvidScolStudentiNoteDubHASHPFN ALL TO ([PRIMARY])
GO
MCP (C Sharp) Software Engineer, Cluj Napoca
|
|
-
10-25-2006, 12:36 PM |
|
|
|