Welcome to Sign in | Help
in Search

Optimizare - partitioned table/index?

Last post 11-03-2007, 10:18 AM by rremus. 6 replies.
Sort Posts: Previous Next
  •  11-01-2007, 2:20 PM 3159

    Optimizare - partitioned table/index?

    salut

    Am un "table" cu vreo 2mil de inregistrari. Vreau sa optimizez cautarea

    Structure e cam asa:

    CREATE TABLE table1
    (
     [tag_id] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
     [content_id] [numeric](18, 0) NULL,
     [paragraph_nr] [int] NULL,
     [sentence_nr] [int] NULL,
     [word_nr] [int] NULL,
     [word_type] [int] NULL,
     [word_id] [numeric](18, 0) NULL,
     [word_name] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [word_lemma] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [word_lemma_id] [numeric](18, 0) NULL,
     [tag_type_id] [tinyint] NULL,
     [word_tag] [varchar](3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [word_group_1_id] [tinyint] NULL,
     [word_group_1_id_nr] [tinyint] NULL,
     [word_group_2_id] [tinyint] NULL,
     [word_group_2_id_nr] [tinyint] NULL,
     [ses_user_id] [numeric](18, 0) NULL,
     [tag_ref_id] [numeric](18, 0) NULL,
     [tag_scope_id] [tinyint] NULL,
     [word_count] [numeric](18, 0) NULL,
     [word_count_content] [numeric](18, 0) NULL,
     [tag_length] [int] NULL,
     [word_type_score] [numeric](18, 0) NULL,
     CONSTRAINT [PK_tagging] PRIMARY KEY CLUSTERED
    (
     [tag_id] ASC
    )
    WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    END


    Ai am niste proceduri care fac selecturi de genul:

    INSERT INTO table2 (ws_id, content_id)
    SELECT @term_id, tag_ref_id FROM table1 WHERE tag_type_id = 0 AND word_lemma = @term
    GROUP BY tag_ref_id

    Ce optimizari pot face? Am primit o recomandare sa folosesc "partitioned table/index"

    Voi ce mi-ati recomanda?
    Multumesc!

     

  •  11-01-2007, 2:42 PM 3161 in reply to 3159

    Re: Optimizare - partitioned table/index?

    Pentru partitii aveti nevoie de criterii de partajare a datelor, de exemplu pentru un tabel de facturi exista un camp data facturii care permite gruparea facturilor dupa luna (ianuarie, februarie, etc) . Insa si aceasta partitionare presupune ca utilizarea datelor se face selectiv, adica se interogheaza bd mai mult pe luni si nu toate datele la un loc. Dvs. , pt ca stiti semnificatia coloanelor puteti sti daca vreo coloana se preteaza la asa ceva.

    Iar legat de optimizarea cautarii se pot crea indecsi , depinde de criteriile de cautare


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  11-01-2007, 4:35 PM 3168 in reply to 3161

    Re: Optimizare - partitioned table/index?

    Poti incepe prin a folosi "Database Engine Tuning Advisor" (in SQL 2000 se numeste "index tuning wizard", parca...). Simuleaza un mediu de lucru (i.e. "prefa-te putin ca lucrezi"...Smile), "ia" un trace cu profiler-ul si foloseste-l ca workload pentru tuning advisor. Vezi recomandarile generate.
  •  11-01-2007, 4:36 PM 3169 in reply to 3161

    Re: Optimizare - partitioned table/index?

    Unul din criterii ar fi de exemplu dupa word_type care poate lua valorile 8, 9 sau altele

    Asta inseamna ca trebuie sa fac selecturi diferite in functie de partitia pe care o selectez?

    Care ar fi pasii pentru a crea partitie in functie de "word_type"?

    Multumesc pentru promtitudine!

     

     

  •  11-01-2007, 6:34 PM 3173 in reply to 3169

    Re: Optimizare - partitioned table/index?

    Este de preferat ca partitionarea sa fie cat mai naturala in sensul exemplului de mai sus, adica facturile necesare unor interogari sunt de pe lunile recente si astfel se umbla pe o zona cat mai redusa de date.

    legat de cum se face partitionarea iata o experienta aici 


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  11-01-2007, 6:54 PM 3174 in reply to 3169

    Re: Optimizare - partitioned table/index?

    Liviu: trebuie sa precizezi un lucru elementar, versiunea de SQL Server folosita de catre tine si ce tip de partitionare.
     

    Partitionare ai si in SQL Server ... 7 / 2000/2005 ...
    Partitionarea poate fi pe orizontala (la nivel de inregistrari) si pe verticala (la nivel de câmpuri). Banuiesc ca aici este vorba de partitionarea pe orizontala (?!).

    De asemenea partitionarea o realizezi (in opinia mea) daca acel câmp în funcţie de care se face partiţionarea este utilizat în multe interogări de selecţie (la partitionarea pe verticala).

    Legat de indecşi: dacă câmpul pentru care se creează indexul are o mulţime restrânsă de valori este probabil ca indexul sa nu fie utilizat la selecţie (asta mai ales daca gradul de selecţie a înregistrarilor este mare si daca indexul este NONCLUSTERED). Totusi in exemplu se utilizeaza operatorul = ...
     

  •  11-03-2007, 10:18 AM 3191 in reply to 3159

    Re: Optimizare - partitioned table/index?

    liviutrt:

    INSERT INTO table2 (ws_id, content_id)
    SELECT @term_id, tag_ref_id FROM table1 WHERE tag_type_id = 0 AND word_lemma = @term
    GROUP BY tag_ref_id

    Innainte de a vorbi despre optimizari, hai sa vorbim despre ce anume vrei sa obtii cu acest INSERT ... SELECT. Mai exact, la ce anume foloseste clauza GROUP BY?


    http://rusanu.com
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems