Witam.Muszę w bazie danych ułożyć zapytanie do bazy danych zliczające powtarzające się elementy z trzech kolumn.Mianowicie mam dylemat,czy do tego celu ułożyć 3 selecty z count,czy jeden select z count i z distinct(widziałem przykłady na google)lub z union.Czy 3 proste zapytania są wydajniejsze od jednego bardziej złożonego zapytania?

Czy, ktoś testował jak to wygląda w rzeczywistości?
Fifi209
17.07.2011, 12:31:28
Cytat(Rid @ 17.07.2011, 13:24:48 )

Czy 3 proste zapytania są wydajniejsze od jednego bardziej złożonego zapytania?

Przetestuj i Nam napisz. Jaki problem?
Ja mam w bazie dwa wiersze hehe jako testowe,musiałbym mieć ze 100 ,żeby cokolwiek przetestować,tak poza tym
pytałem czy ktoś to już zrobił,a nie czy ktoś to zrobi.
Fifi209
17.07.2011, 12:37:31
Problemem nie jest wygenerowanie danych chyba? Wygeneruj sobie z 10 tyś i po sprawie. Nie wiemy jakie zapytania, jak wygląda baza, więc i odpowiedzi nie ma.
zend
17.07.2011, 12:40:27
100? Chyba 100 000

Jaki problem z wypełnieniem bazy? Robisz 3 inserty, ((ctrl+ c, ctrl+v) * 10) => ctrl+ c, ctrl+v i już masz 300 rekordów

Czekamy na testy
Baza MSSQL,bodajże 35kolumn -większość pola typu Nvarchar, o różnej długości,niektóre pola z allow null ,niektóre nie.
Widzi Pan trudno jest wygenerować automatycznie rekordy na 35kolum,które się od siebie różnią.
Musiałbym utworzyć nową tabelę co najmniej z 5 kolumnami typu nVarchar i tam wypełniać i testować,ale to odprowadziłoby mnie od mojego docelowego zadania.
Dałem jedynie pytanie co jest optymalniejsze -3 proste zapytania do bazy ,czy jedno złożone,licząc na odpowiedź osoby zorientowanej w tym temacie,która może przeprowadzała takie testy,ale jak nikt takich testów nie przeprowadzał i nie wie
to po prostu temat do zamknięcia.
PS.Trochę dziwi minie,że nikogo to nie zainteresowało ,albo nie zauważył różnic pomiędzy tymi zapytaniami,mimo że
są Osoby na tym Forum, które pisały 1000-ce kwerend.
35 kolumn? Czy to aby nie za dużo? Wydajność nie zależy tylko od struktury zapytania, ale też od tego, ile razy baza będzie musiała sięgać do dysku i co będzie robione w międzyczasie. Aby zrobić COUNT(), trzeba wczytać strony z poszczególnymi wierszami do pamięci. Inne wyniki Ci wyjdą, jeśli liczba kolumn będzie mała, inne, jeśli duża, inne, jeśli baza będzie w międzyczasie wykonywać jeszcze inne zadania (one też mogą potrzebować pamięci, zatem jest mniejsza szansa, że dane interesujące klauzulę COUNT() już w niej będą).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.