![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 466 Pomógł: 11 Dołączył: 21.09.2006 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
Chcę sprawdzić, czy w danym dniu padła odpowiedź konkretnego użytkownika. Napisałem sobie 2 zapytania i zastanawiam się, które będzie bardziej optymalne?
czy
Ta tabela będzie z czasem spora np kilka mln rekordów. Ten post edytował robos85 17.02.2010, 16:15:24 |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Zależy od silnika bazodanowego oraz indeksów.
Podejrzewam, że COUNT będzie nieco szybszy, ale przeprowadź najpierw jakiś benchmark. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 5 Dołączył: 2.11.2006 Skąd: 52.259 °N, 21.020 °E Ostrzeżenie: (0%) ![]() ![]() |
Niezależnie od silnika bazodanowego, czy indeksów (zakładam, że w obu wypadkach będzie ten sam silnik i będą lub nie założone indeksy na id, user_id, date) drugie zapytanie (z limit 1) będzie szybsze lub równe.
W przypadku, kiedy istnieje taki rekord wystarczy jego jedno wystąpienie, by baza danych zwróciła wynik, do drugiego (z count) musi zliczyć wszystkie. W przypadku, kiedy nie istnieje odpowiedni rekord oba zapytania wykonają identyczne sprawdzenie. PS1. Koszt agregatu pomijam, jako mało tutaj istotny, ale i tak działa na niekorzyść zapytania pierwszego. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 34 Dołączył: 22.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 09:41 |