Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Mechanizm bazy danych
adam882
post
Post #1





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


Witam!

Mam dwa pytania:

1. Słyszałem, że mechanizm InnoDB domyślnie posiada indeksy (nie wiem czy to prawda). Czy zatem w przypadku używania tego mechanizmu nie trzeba tak, jak ma to miejsce w MyISAM dodawać indeksy na kolumny, które są często wyszukiwane?

2. Mam na swojej stronie zapytanie typu SELECT, gdzie w trakcie pobierania danych z tabeli występuje nawet 50 razy odniesienie do WHERE.
np. SELECT * FROM tabela WHERE nazwa="slowo1" OR nazwa="slowo2" (...) OR nazwa="slowo50"
W związku z tym chciałbym się zapytać, czy w tym przypadku warto pozostać przy mechanizmie MyISAM z indeksem na kolumnę "nazwa" ?

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
ZaXaZ
post
Post #2





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


Cytat(adam882 @ 7.09.2014, 12:48:32 ) *
(...) Mam na swojej stronie zapytanie typu SELECT, gdzie w trakcie pobierania danych z tabeli występuje nawet 50 razy odniesienie do WHERE.
np. SELECT * FROM tabela WHERE nazwa="slowo1" OR nazwa="slowo2" (...) OR nazwa="slowo50"

A nie możesz zamiast tych 50 OR nazwa='xx' zrobić poprostu `nazwa` LIKE %slowo%
(IMG:style_emoticons/default/questionmark.gif) , Używasz OR więc być może masz podobne te słowa.

Ten post edytował ZaXaZ 7.09.2014, 12:42:59
Go to the top of the page
+Quote Post
adam882
post
Post #3





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


Akurat w tym przypadku wyszukiwane słowa są różne, a użycie LIKE %słowo% nic nie zmieni, ponieważ znaleziona pozycja w kolumnie "nazwa" musi być indentyczna jak szukane słowo.

Ten post edytował adam882 7.09.2014, 12:52:31
Go to the top of the page
+Quote Post
by_ikar
post
Post #4





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Ad1. auto indexy? Pierwszy raz o czymś takim słyszę, bez różnicy dla jakiego silnika.. Indeksy wszędzie się zakłada samemu. Skąd baza miałaby wiedzieć co indeksować a co nie?

Ad2. zamiast where OR, poczytaj o where IN, które jest 2-3 razy szybsze. Również poczytaj czy faktycznie potrzebujesz przeszukać bazę pod kontem 50 różnych wartości..
Go to the top of the page
+Quote Post
adam882
post
Post #5





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


Wielkie dzięki! Zmieniając OR na IN moje zapytanie przyspieszyło z 0.0821 do 0.01 sek.
Go to the top of the page
+Quote Post

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: 24.08.2025 - 13:31