Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Które zapytanie bardziej optymalne?
Forum PHP.pl > Forum > Bazy danych
robos85
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?
  1. SELECT COUNT(`id`)
  2. FROM `exp_questions_answers`
  3. WHERE (
  4. user_id = '1'
  5. )
  6. AND (
  7. DATE( `date` ) = '2010-02-17'
  8. )
czy
  1. SELECT `id`
  2. FROM `exp_questions_answers`
  3. WHERE (
  4. user_id = '1'
  5. )
  6. AND (
  7. DATE( `date` ) = '2010-02-17'
  8. )
  9. LIMIT 1


Ta tabela będzie z czasem spora np kilka mln rekordów.
erix
Zależy od silnika bazodanowego oraz indeksów.

Podejrzewam, że COUNT będzie nieco szybszy, ale przeprowadź najpierw jakiś benchmark.
Gapollo
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.
wiiir
nie wiem jak w innych bazach ale aktualnie jestem na bierzaco w oraclu
taki count
  1. SELECT COUNT(1)
  2. FROM `exp_questions_answers`
  3. WHERE (
  4. user_id = '1'
  5. )
  6. AND (
  7. DATE( `date` ) = '2010-02-17'
  8. )


jest chyba najlepszy od count(*) count('id')
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.