Welcome to Sign in | Join | Help
in Search

Interogare mai ciudata

Last post 12-17-2010, 7:38 AM by Syberye. 5 replies.
Sort Posts: Previous Next
  •  12-16-2010, 4:12 PM 8558

    Interogare mai ciudata

    Buna ziua

    Am o tabela cu multe randuri, milioane. In aceasta tabela am 6 cimpuri care permit valori de la 1 la 4 (una din ele doar pana la 3 de fapt). Se doreste interogarea tabelei dupa unu sau mai multe cimpuri din cele 6 in mod dinamic. Adica la o interogare sa am poate doar doua campuri la alta toate la alta poate unu.

    Cum as putea creste performata unui selecte (pe bune sint vreo 20 mil de randuri in tabela) in functie de ce se doreste sa se selecteze. (vreau sa spun ca aceasta tabela face un Join cu o alta tabela si mai are si alte campuri folosite in select)

    Partea proasta este ca nu pot crea un index pe ele (mai ales ca o valoarea a oricarui cimp filtreaza foarte putin din date - lucru asta putind duce la o ignorare a index-ului)

    Aveti cunva ceva ideie cum sa abordez aceasta problema.

    Va multumesc
  •  12-16-2010, 4:27 PM 8559 in reply to 8558

    Re: Interogare mai ciudata

    Din ce am inteles din discutiile directe campurile folosite sunt de tip integer.
    As umbla in primul rand la acestea. Va trebuie maxim un tinyint. De fapt e posibila stocarea chiar a 2 coloane pe octet. Veti reduce numarul de pagini alocate datelor.
    Iarasi folositi coloanele de tip data calendaristica pentru filtrarea datelor.
    Pentru o solutie mai detaliata este necesara o detaliere a solutiei dumneavoastra.

    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
  •  12-16-2010, 4:36 PM 8560 in reply to 8559

    Re: Interogare mai ciudata

    As putea converti acele campuri (int, tinyint) intrun char prin concatenarea lor. Acest char ar avea maxim 4*4*4*4*3*3 undeva la 2500 de variante.
    Cind doresc filtrare generez un string de genul 1_2344 si sa le compar cu like.
    Nu este o varianta acest metoda?
  •  12-16-2010, 5:05 PM 8561 in reply to 8560

    Re: Interogare mai ciudata

    Nu cred ca performanta obtinuta ar fi mai buna. As merge totusi pe tip de date numerice. Eventual o coloana calculata (persistata) de tip integer pe care sa stocati col1 + 2^4 * col2 + 2^8 * col3 + 2^12 * col4 ....
    Ar mai eficienta filtrarea WHERE colcalculata = valoare in cazul adaugarii unui index pe colcalculata.

    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
  •  12-17-2010, 12:04 AM 8562 in reply to 8561

    Re: Interogare mai ciudata

    Nu vad cum as putea filtra daca unu din campuri nu intra in conditile de filtrare
  •  12-17-2010, 7:38 AM 8563 in reply to 8562

    Re: Interogare mai ciudata

    Cred ca am inteles. Aplic un & (Bitwise AND) pe coloana nou formata ceva de genul colcaculata & valoarefiltru = valoarefiltru unde valoarea filtru se caculeaza dupa aceas formula si pentru coloanele care nu intra in selectie pun numarul maxim ca sa selecteze toate valorile (15 in cazu meu). Astfel pot face un index dupa respectiva coloana.

View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems