Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Mechanizm bazy danych
Forum PHP.pl > Forum > Przedszkole
adam882
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
ZaXaZ
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%
questionmark.gif, Używasz OR więc być może masz podobne te słowa.
adam882
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.
by_ikar
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..
adam882
Wielkie dzięki! Zmieniając OR na IN moje zapytanie przyspieszyło z 0.0821 do 0.01 sek.
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.