Złożony indeks FULLTEXT w MySQL
Chciałbym, aby system pozwalał na wyszukiwanie wiadomości użytkownika przez określonego użytkownika. załóżmy, że masz podany stół
create table messages(
user_id int,
message nvarchar(500));
Jakiego rodzaju indeksu powinienem tutaj użyć, jeśli chcę wyszukać wszystkie wiadomości od użytkownika 1, zawierające słowo „foo”.
Prosty, nie unikalny indeksidentyfikator użytkownikaBędzie filtrować tylko określone wiadomości użytkownika, a następnie pełne skanowanie w poszukiwaniu określonego słowa.PEŁNY TEKST indeks nawiadomość
to znajdzie wszystkie wiadomości od wszystkich użytkowników, a następnie filtruj według ID, wydaje się być bardzo nieefektywne w przypadku dużej liczby użytkowników.comopound indeks na obuidentyfikator użytkownika iwiadomość
Drzewo indeksu pełnotekstowego jest tworzone dla każdego użytkownika osobno, więc można je przeszukiwać indywidualnie. Podczas zapytania system filtruje wiadomości wedługID a następnie wykonuje wyszukiwanie tekstu w pozostałych wierszach indeksu.
A.F.A.I.K. ostatni jest niemożliwy. Więc zakładam, że użyję opcji 1-szej, będzie ona działać lepiej w przypadku kilku tysięcy użytkowników?
A jeśli każdy będzie miał ~ 100 wiadomości, pełna iteracja nie będzie kosztować dużo zasobów?
Być może mogę dołączyć nazwę użytkownika do wiadomości i użyć trybu wyszukiwania pełnotekstowego BOOLEAN, ale myślę, że byłoby wolniej niż przy użyciu indeksowanychidentyfikator użytkownika.