W czasie prób optymalizacji działania mojej bazy nasuneło mi się kilka pytań, może ktoś sie już z tym spotkał:
1. Kolejka jest budowana na podstawie zadanych kryteriów wyszukiwania (przekazanych przez formularz). Jak optymalnie pobrać liczbę pasujących rekordów (użyte do stronicowania i informacji dla użytkownika) a następnie pobrać ich tylko XX (ustalone w LIMIT). Ja mam to zrobione teraz tak i czuję że takie podwójne zapytanie nie jest super optymalne:):
<?php $query=\"SELECT DISTINCT (...) FROM tabela1 AS t1, tabela1 AS t2,(...) WHERE (...) ORDER BY (...)\"; //...wyświetlenie info dla użytkownika (ilość pasujących) //...zbudowanie stronicowania $query.=\" LIMIT $offset,XX\"; //...wyświetlanie porcji informacji } ?>
2. Na każdej podstronie korzystającej z bazy danych używam
, wg manuala jeśli połączenie jest otwarte, to zwraca to id tego połączenia. Czy cos da zamykanie połączenia (
<?php ?>
) pod koniec skryptu. A może zamiast normalnych połączen dać stałe?
<?php ?>
3. Wyszukuję w polach TEXT ciągi znaków przez klauzulę:
...pole_txt LIKE %$klucz%...
W manualu MySql znalazłem coś takiego:
Cytat
The index also can be used for LIKE comparisons if the argument to LIKE is a constant string that doesn't start with a wildcard character
...a z drugiej strony:
Cytat
MySQL 4.0 and up performs an additional LIKE optimization. If you use ... LIKE '%string%' and string is longer than three characters, MySQL will use the Turbo Boyer-Moore algorithm to initialize the pattern for the string and then use this pattern to perform the search quicker
Czy to znaczy że jednak warto będzie na te pola textowe w których jest szukanie nałożyć FULLTEXT INDEX?