To, co podałeś, jest całkowicie poprawne, tabela tymczasowa będzie widoczna tylko dla bieżącego użytkownika/połączenia. Mimo to istnieje kilka ogólnych problemów i kilka innych problemów, takich jak:
- Dla każdego z tysięcy wyszukiwań, które zamierzasz utworzyć i wypełnić tę tabelę (i usunąć ją później) — nie według użytkownika, według wyszukiwania. Ponieważ każde wyszukiwanie najprawdopodobniej ponownie wykona skrypt, a "na sesję" nie oznacza sesji PHP - oznacza sesję bazy danych (otwarte połączenie).
- Będziesz potrzebował
CREATE TEMPORARY TABLES
przywilej, który możesz nie mam. - Mimo to ta tabela naprawdę powinna mieć typ MEMORY, który kradnie pamięć RAM bardziej niż wygląda. Ponieważ nawet mając VARCHAR, tabele MEMORY wykorzystują pamięć wierszy o stałej długości.
- Jeśli twoja heurystyka później będzie musiała odwoływać się do tej tabeli dwukrotnie (np.
SELECT xyz FROM patternmatch AS pm1, patternmatch AS pm2 ...
) - nie jest to możliwe w przypadku tabel MEMORY.
Następnie łatwiej byłoby dla Ciebie – a także dla bazy danych – dodać LIKE '%xyz%'
bezpośrednio do Twoich images
tabele WHERE
klauzula. Zrobi to samo bez dodatkowych kosztów związanych z tworzeniem TABELI TEMP i dołączaniem do niej.
W każdym razie - nieważne w którą stronę pójdziesz - to GDZIE będzie strasznie wolno. Nawet jeśli dodasz indeks na images.name
najprawdopodobniej będziesz potrzebować LIKE '%xyz%'
zamiast LIKE 'xyz%'
, aby indeks nie był używany.
Nie. :)
Opcje alternatywne
MySQL ma wbudowane pełnotekstowe wyszukiwanie (od wersji 5.6 również dla InnoDB), który nawet może dać ci taką punktację:Gorąco polecam przeczytanie i wypróbowanie. Możesz być pewien, że baza danych wie lepiej od Ciebie, jak skutecznie przeprowadzić wyszukiwanie.
Jeśli zamierzasz używać MyISAM zamiast InnoDB, pamiętaj o często pomijanym ograniczeniu polegającym na tym, że wyszukiwanie FULLTEKST zwraca cokolwiek tylko wtedy, gdy liczba wyników jest mniejsza niż 50% łącznej liczby wierszy tabeli.
Inne rzeczy, na które możesz chcieć spojrzeć, to na przykład Solr (Ładne wprowadzenie do tego tematu byłoby początkiem http://en.wikipedia.org/wiki/Apache_Solr ). Używamy go w naszej firmie i wykonuje świetną robotę, ale wymaga sporo nauki.
Podsumowanie
Samo rozwiązanie obecnego problemu (wyszukiwanie) polega na użyciu funkcji PEŁNEGO TEKSTU.
Aby podać liczbę, 10 000 połączeń na sekundę nie jest już "trywialne" - przy setkach tysięcy wyszukiwań na sekundę problemy z wydajnością, które napotkasz, są wszędzie w Twojej konfiguracji. Będziesz potrzebować kilku serwerów, równoważenia obciążenia i mnóstwa innych niesamowitych technicznych bzdur. A jednym z nich będzie na przykład Solr;)