Daimos
10.11.2007, 15:04:43
Witam
jak przy (np.) 1000 rekordow, wybrac tylko te (by nie obciazac bazy) ktore maja unikalny rekord
chodzi o to, ze mam w bazie danych duzo danych i np. w kolumnie "test" 200 rekordow ma wartosc 'aaa' 300 'bbb' reszta 'ccc'
oczywiscie te wartosci (aaa,bbb,ccc) nie sa dla mnie znane, wiem tylko ze sie powtarzaja, wiec nie moge uzyc WHERE
w efekcie chcialbym, wedlug tamtego przykladu, miec wyswietlone jedynie te 3 rekordy/wartosci
pozdrawiam
==========
ok wiem ze to moge zrobic za pomoca DISTINCT
ale baza mimo wszystko jest bardzo obciazona, bo wywala mi bledy, ze za malo pamieci, jezeli wstawie limit, to wszystko dziala, no ale musze przerobic wszystkie rekordy, ktos moze cos doradzi
Indeo
16.12.2007, 02:38:30
W takich sytuacjach wprowadza się do tabeli dodatkowe pole będące sumą kontrolną kombinacji tych pól, które wg Ciebie warunkują unikalność rekordu. Robi sie tak szczególnie w przypadku pól text i blob (długie). Taką sumę najlepiej ustanawiać w momencie dopisywania bądź modyfikowania rekordu (najlepiej triggerem), mozna też zrobić proste zapytanie na zasadzie
UPDATE tabela SET check_sum=md5(concat(pole1,pole2,pole3))
aby wygenerować takie sumy dla wszystkich rekordów. Teraz aby sprawdzić czy masz do czynienia z "duplikatami" wystarczy porównać sumę kontrolną. Distinct na jednym polu o stałej długości będzie działał szybciej niż na kombinacji kilku pól.