adam882
7.09.2014, 11:48:32
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
7.09.2014, 12:41:27
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%
, Używasz OR więc być może masz podobne te słowa.
adam882
7.09.2014, 12:49:37
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
7.09.2014, 13:00:30
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
7.09.2014, 13:16:11
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.