Autor Zpráva
blaaablaaa
Profil
Ahoj,
mam MSSQL tabulku s nekolika sty tisici/miliony produktu. Ta musi byt abecedne razena, proto ji v noci seradim a ulozim si ke kazdemu zaznamu jeho poradi.
Toto poradi pak pouzivam pri razeni i strankovani.
Problem vsak nastava, kdyz chci vlozit novy produkt, kdy nevim, co mu ulozit do poradi:
- 0 - zaradi se na zacatek, nerazene, vice vyrobku znemozni strankovani
- MIN-1 - zaradi se na zacatek, nerazene
- MAX+1 - zaradi se na konec, nerazene
- NULL - nebudu vypisovat vubec
- dopocitat priblizne umisteni v poradi - tady se mi bohuzel nedari sestavit spravny algorytmus pro prepocet

Mohli byste me nekdo nasmerovat ci poradit reseni? Diky
Kajman_
Profil *
dopocitat priblizne umisteni v poradi - tady se mi bohuzel nedari sestavit spravny algorytmus pro prepocet

select count(*)+1 as priblizne_poradi from tabulka where nazev<'Nazev vkladaneho'

S tím, že bez indexu na sloupci, podle kterého se to abecedně řadí (v prikladu nazev), to bude až moc pomalé.
blaaablaaa
Profil
Kajman:
Ja se bojim, ze tohle bude pomale i s indexem, bohuzel mam ted v db jen par tisic zaznamu, tak to nemam na cem otestovat.
Kajman_
Profil *
Vytvořte si testovací tabulku s očekávaným počtem řádků.

Dalším pokusem by mohlo být něco jako
select top 1 poradi poradi_dalsiho from tabulka where nazev>'Nazev vkladaneho' order by nazev
blaaablaaa
Profil
Kajman:
Diky, mam v tabulce ulozeno jeste prvni pismeno nazvu, cimz se to jeste urychli.
Jeste jsem mel problem se situaci, kdy uzivatel vlozi napr. 20 vyrobku se stejnym nazvem (tzn. budou mit stejnou hodnotu poradi), coz jsem vyresil podminkou overujici, zda ma prvni a posledni prvek výběru stejnou hodnotu poradi - pokud ano, navysi ji o 1 (cimz se sice nemusi zobrazit vsechny produkty - pokud je vice stejnych poradi nez pocet polozek na strance, ale strankovani si zachova funkcnost).
Diky
Kajman_
Profil *
mam v tabulce ulozeno jeste prvni pismeno nazvu, cimz se to jeste urychli.

Více podmínek to může občas i zpomalit, to zrychlení tušíte, nebo jste ho změřil?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0