![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Czy
jest szybsze od
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
Najlepiej dodać do końca LIMIT 1 tak? Ten post edytował armon 20.09.2011, 08:51:42 |
|
|
![]()
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 -------------------- śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu.. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
limit na pewno nie zaszkodzi ani nie spowolni więc poprostu dodaj jeśli wiesz, ze chcesz pobrać max 1 rekord.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
limit na pewno nie zaszkodzi ani nie spowolni więc poprostu dodaj jeśli wiesz, ze chcesz pobrać max 1 rekord. Mój plik będzie zajmował o 7 znaków w bajtach więcej z każdym takim zapytaniem ;P plik .php będzie musiał być dłużej czytany ;P A tak na poważnie uruchomienie czegoś co jest niepotrzebne, nie zmienia faktu, że zostało to jednak uruchomione, czyli trzeba było wywołać kod jakiejś funkcji, nawet jeśli był tam warunek sprawdzający czy klucze nie są już unique etc., to trzeba było to sprawdzić i wywołać funkcję. Oczywiście to jest prawie nic, no ale przy milionach zapytań to jest coś ![]() Czyli nikt nie wie? |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat ój plik będzie zajmował o 7 znaków w bajtach więcej z każdym takim zapytaniem ;P plik .php będzie musiał być dłużej czytany ;P Proszę Cię..... miej litość. A jeśli nie masz litości, to leć szybciutko kasuj wszystkie spacje, tabulatory, komentarze, skracaj nazwy wszystkich funkcji do max 3 znaków.A tak na poważnie uruchomienie czegoś co jest niepotrzebne, nie zmienia faktu, że zostało to jednak uruchomione, czyli trzeba było wywołać kod jakiejś funkcji, nawet jeśli był tam warunek sprawdzający czy klucze nie są już unique etc., to trzeba było to sprawdzić i wywołać funkcję. Oczywiście to jest prawie nic, no ale przy milionach zapytań to jest coś Cytat Czyli nikt nie wie? Zmierz czas z i bez i będziesz wiedział. Stwórz tylko wpierw dostatecznie dużą tablicę.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Proszę Cię..... miej litość. A jeśli nie masz litości, to leć szybciutko kasuj wszystkie spacje, tabulatory, komentarze, skracaj nazwy wszystkich funkcji do max 3 znaków. Zmierz czas z i bez i będziesz wiedział. Stwórz tylko wpierw dostatecznie dużą tablicę. To pierwsze to było ironia, jednak rozkaz wywołania czegoś niepotrzebnie na pewno zabiera jakieś zasoby. Pozostaje mi przetestować. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
limit na pewno nie zaszkodzi ani nie spowolni więc poprostu dodaj jeśli wiesz, ze chcesz pobrać max 1 rekord. Jakiś czas temu zastanawiałem się jak działa LIMIT. Wydaje mi się, że wycina ze zbioru wynikowego pewną porcję danych. Najpierw wykonuje się zapytanie z warunkami i sortowaniem, a potem odpalany jest LIMIT. Jeśli tak jest to jakiś narzut (pewnie śmiesznie mały, ale jednak) będzie by zamiast od razu zwrócić dane to jeszcze wyciąć z nich żądaną porcję. Jeśli ktoś ma w tej dziedzinie wiedzę to proszę o info - chciałbym wiedzieć jak to działa, tak z czystej ciekawości. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Akurat mam do testów dość sporą bazę i jednak wykonywanie zapytania z limit a bez jest znacznie szybsze. Na pewno najpierw muszą przejść warunki i sortowanie, bo bez tego limit nie miałby sensu, nie mniej jednak limit daje kopa więc jakoś to muszą wewnętrznie optymalizować.
Podkreślam jednak, iż stwierdzam tak na podstawie obserwacji a nie teoretycznej wiedzy. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 153 Pomógł: 41 Dołączył: 28.06.2011 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
Caly czas mowimy o wyszukiwaniu w tabeli wiersza na podstawie kolumny ktora ma PK ?
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Akurat ja testowałem na różnych polach i z PK i z indeksem i bez
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 153 Pomógł: 41 Dołączył: 28.06.2011 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
No to w takim przypadku limit na pewno pomaga
![]() |
|
|
![]()
Post
#13
|
|
![]() 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:) -------------------- śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu.. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 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:) 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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 10:28 |