Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> LIMIT - optymalizacja zapytań po indeksie
armon
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 24.09.2009

Ostrzeżenie: (0%)
-----


Witam,

Czy
  1. SELECT pole FROM tabela WHERE id = 1 LIMIT 1

jest szybsze od
  1. SELECT pole FROM tabela WHERE id = 1


gdy id jest primary key lub też unique?

Wiem, że bez indeksu na pewno jest szybsze, ponieważ po znalezieniu jednego rekordu nie trzeba przeszukiwać następnych.

Lecz z indeksem unikalnym samo z siebie wynika, że to się już nie powtórzy? więc chyba nic nie przyspieszy?

Rozumiem, że z normalnym INDEX (bez unique), LIMIT 1 przyspiesza zapytanie?

Myślę nad ustawieniem w bazie danych login na klucz unique, oraz login i hasło na klucz złożony INDEX. Na samo hasło nie będę nakładał indeksu bo po co w końcu jakieś tam szansę powtórzenia ma.

Tak więc wybierają później
  1. SELECT id FROM tabela WHERE login = 'loginek' AND haslo = 'cryptedwhirlpoolthing' LIMIT 1


Najlepiej dodać do końca LIMIT 1 tak?

Ten post edytował armon 20.09.2011, 08:51:42
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
maly_swd
post
Post #2





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


jesli jest unique/primary to moim zdaniem nie ma znaczenia limit (bo i tak czyta to z klucza)

co do tego "SELECT id FROM tabela WHERE login = 'loginek' AND haslo = 'cryptedwhirlpoolthing' LIMIT 1"

to jesli masz na login unique/primary to nie ma opcji aby bylo 2 uzytkownikow z tym samym loginem a co za tym idzie nie moga byc 2 hasla. Wiec limit nie ma sensu
Go to the top of the page
+Quote Post
armon
post
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 24.09.2009

Ostrzeżenie: (0%)
-----


Cytat(maly_swd @ 20.09.2011, 09:56:07 ) *
to jesli masz na login unique/primary to nie ma opcji aby bylo 2 uzytkownikow z tym samym loginem a co za tym idzie nie moga byc 2 hasla. Wiec limit nie ma sensu


Ale jest opcja, że dwóch użytkowników będzie miało te same hasła, a różne loginy, a koniunkcja jest spełniona wtedy i tylko wtedy, gdy oba argumenty są prawdziwe.

Chcę uwzględnić tutaj optymalizację pod klucz złożony (nałożony na pole login I hasło), wybieramy nie tylko po loginie, ale również po haśle. Klucze złożone potrafią jeszcze bardziej przyspieszyć zapytanie.

Myślę, że baza po tym, że login jest unique, a hasło i login są kluczem złożonym nie może się domyślić faktu, że login i hasło W TYM SAMYM momencie są różne, więc dodanie LIMIT 1 chyba przyspieszy (co prawda nieznacznie, ale to zrobi?)

Ten post edytował armon 20.09.2011, 09:01:52
Go to the top of the page
+Quote Post
maly_swd
post
Post #4





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


" że dwóch użytkowników będzie miało te same hasła, "

No pomysl, masz unique na uzytkowniku, wiec jesli login sie nie zgadza to mysql nie porownuje dalej hasla, co za tym idzie dostaniesz tylko to co spelnia 2 warunki czyli 1 uzytkownika

nospor-> ja sprawdzalem podobnie i jesli warunki dotyczna pola unique to limit nie dawal roznicy. Baza z 20mln wpisow.

Wiec pewnie tez zalezy od bazy (danych) i innych czynnikow, ale jesli limit nie szkodzi to czemu go nie dawac:)
Go to the top of the page
+Quote Post
armon
post
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 24.09.2009

Ostrzeżenie: (0%)
-----


Cytat(maly_swd @ 20.09.2011, 12:12:33 ) *
" że dwóch użytkowników będzie miało te same hasła, "

No pomysl, masz unique na uzytkowniku, wiec jesli login sie nie zgadza to mysql nie porownuje dalej hasla, co za tym idzie dostaniesz tylko to co spelnia 2 warunki czyli 1 uzytkownika

nospor-> ja sprawdzalem podobnie i jesli warunki dotyczna pola unique to limit nie dawal roznicy. Baza z 20mln wpisow.

Wiec pewnie tez zalezy od bazy (danych) i innych czynnikow, ale jesli limit nie szkodzi to czemu go nie dawac:)


Rzeczywiście pod warunkiem, że MySQL potrafi się domyślić po tym, że gdy na login jest nałożony indeks UNIQUE to pierwszy znaleziony rekord MUSI być jedynym, który mógłby spełnić koniunkcję. Nie uwzględniłem w moim rozumowaniu faktu, że MySQL ma to tak zoptymalizowane względem operatorów logicznych.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 20:50