Welcome to Sign in | Help
in Search

indexi

Last post 10-25-2006, 12:36 PM by xmldeveloper. 11 replies.
Sort Posts: Previous Next
  •  10-19-2006, 10:39 AM 425

    indexi

    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 427 in reply to 425

    Re: indexi

    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 499 in reply to 427

    Re: indexi

    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 502 in reply to 499

    Re: indexi

    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 504 in reply to 502

    Re: indexi

    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 506 in reply to 504

    Re: indexi

    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 Smile ) , 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 507 in reply to 506

    Re: indexi

    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 510 in reply to 507

    Re: indexi

    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 512 in reply to 510

    Re: indexi

    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 514 in reply to 512

    Re: indexi

    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 Big Smile.

    Daniel S. 

     


    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  10-25-2006, 11:25 AM 521 in reply to 504

    Re: indexi

    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 522 in reply to 521

    Re: indexi

    De fapt e o simulare a unei partitii hash folosind partitionare range.
    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems