![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 5 Dołączył: 10.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
żeby sprawdzić poprawność hasła to do bazy ląduje polecenie Select * form user where username = $username and password = $password, Moje pytanie co mam wstawić zamiast * a) 1 ![]() c) count(1) d) * co wpisywać żeby było jak najbardziej optymalnie? Według moich bardzo małych testów najlepiej jest mieć * , czy to prawda? Jak wy z tym sobie radzicie? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Co do tej gwiazdki, to w tym przypadku pobiera ona z bazy wszystkie kolumny z danego wiersza tabeli, gdzie username i password podajesz.
Co tam wpisać ? Najlepiej to czego potrzebujesz, bo pewnie nie zawsze potrzebujesz WSZYSTKIEGO tylko np po zalogowaniu potrzebujesz ID użytkownika, to wpisz zamiast gwiazdki id. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 5 Dołączył: 10.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
nie potrzebuje nic pobierać, potrzebuje tylko sprawdzić czy cokolwiek zwraca.
Czy mógłby ktoś podać linki do jakiegoś benchmarku czy lepiej pobierać właśnie 1, id(primary key) czy * |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Bawisz się w mikrooptymalizację, która na 99.9% jest kompletnie pozbawiona sensu. Wszystkie opcje poza gwiazdką są odpowiednie w tym wypadku. Zresztą użycie gwiazdki również nie będzie miało wpływu na działanie/wydajność kodu.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 8 Dołączył: 21.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Kod mysql> SELECT COUNT(*) FROM `c_1` where id > 99; +----------+ | COUNT(*) | +----------+ | 10626066 | +----------+ 1 row in set (9.05 sec) mysql> SELECT COUNT(1) FROM `c_2` where id > 99; +----------+ | COUNT(1) | +----------+ | 10635593 | +----------+ 1 row in set (8.72 sec) mysql> SELECT COUNT(id) FROM `c_3` where id > 99; +-----------+ | COUNT(id) | +-----------+ | 10636599 | +-----------+ 1 row in set (8.37 sec) mysql> SELECT COUNT(id) FROM `c_4` where id > 99; +-----------+ | COUNT(id) | +-----------+ | 10640481 | +-----------+ 1 row in set (8.05 sec) mysql> SELECT COUNT(*) FROM `c_5` where id > 99; +----------+ | COUNT(*) | +----------+ | 10628649 | +----------+ 1 row in set (10.21 sec) Tak mi wyszło ![]() (bazy różnią się ilością rekordów ale i tak widać, które jest najlepsze) // edit Za to przy czymś takim całkiem inaczej to wygląda:
Ten post edytował kyku 11.10.2012, 22:16:28 -------------------- eArena.pl - hosting serwerów gier multiplayer
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
a wylaczyles qc ?
testy, by byly miarodajne - powinny byc wykonane na jakiejs probie i wyciagnieta srednia. poza tym, czasem drastycznie sa zalezne od maszyny - na dwu różnych - mozesz otrzymac skrajne wyniki. testy maja sens gdy wykonyjemy je na maszynie docelowej z zasymulowanym obciazeniem serwera. w przeciwnym razie mozna sie bardzo zdziwic. j. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
ten test miały sens gdyby był wykonywany na jednej tabeli lub na identycznych kopiach
co w tym dziwnego że czasy były różne skoro w tabelach były różne ilości rekordów
wynik count(*) 0.281s count(id) 0.294s count(1) 0.285s czyli można uznać że wyniki mieszczą się w granicach błędu. Myślę że w tym przypadku niema żadnej różnicy ponieważ silnik mysql'a i tak skorzysta z klucza głównego. Różnice będą wtedy gdy użyjesz kolumnę która nie jest kluczem głównym lub co gorsza jeśli nie jest na tej kolumnie nałożony indeks (oczywiście pomijam różnicę w wyniku jeśli są null'e ) |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 10:16 |