Cześć,
mam bazę póki co 15mln rekordów varchar - unikalne ciągi tekstowe. Potrzebuję wyszukiwać słów słownikowych + odmian danego słowa w tych wierszach, poniżej jedno z wykonywanych zapytań(sphinx):
SELECT * FROM `song_row` WHERE MATCH(:'@(content) \"być\"|\"być\"|\"bądź\"|\"bądźcie\"|\"bądźcież\"|\"bądźmy\"|\"bądźmyż\"|\"bądźże\"|\"będą\"|\"będąc\"|\"będąca\"|\"będącą\"|\"będące\"|\"będącego\"|\"będącej\"|\"będącemu\"|\"będący\"|\"będących\"|\"będącym\"|\"będącymi\"|\"będę\"|\"będzie\"|\"będziecie\"|\"będziemy\"|\"będziesz\"|\"bycia\"|\"byciach\"|\"byciami\"|\"bycie\"|\"byciem\"|\"byciom\"|\"byciu\"|\"byli\"|\"byliby\"|\"bylibyście\"|\"bylibyśmy\"|\"byliście\"|\"byliśmy\"|\"był\"|\"była\"|\"byłaby\"|\"byłabym\"|\"byłabyś\"|\"byłam\"|\"byłaś\"|\"byłby\"|\"byłbym\"|\"byłbyś\"|\"byłem\"|\"byłeś\"|\"było\"|\"byłoby\"|\"były\"|\"byłyby\"|\"byłybyście\"|\"byłybyśmy\"|\"byłyście\"|\"byłyśmy\"|\"byto\"|\"jest\"|\"jestem\"|\"jesteś\"|\"jesteście\"|\"jesteśmy\"|\"niebędąca\"|\"niebędącą\"|\"niebędące\"|\"niebędącego\"|\"niebędącej\"|\"niebędącemu\"|\"niebędący\"|\"niebędących\"|\"niebędącym\"|\"niebędącymi\"|\"niebycia\"|\"niebyciach\"|\"niebyciami\"|\"niebycie\"|\"niebyciem\"|\"niebyciom\"|\"niebyciu\"|\"niebyć\"|\"są\"') GROUP BY `song_id`
przy takim zapytaniu sphinx na dysku SSD i 8GB RAM wykonuje się w ok. 7sekund + drugie tyle jakbym chciał zrobić counta dla paginacji. 14 sekund to jeszcze nie jest tragicznie jak na tak zawiłe zapytanie, tak mi się wydaje przynajmniej, tylko że cały projekt początkowo stanie na najtańszym VPS-ie 512MB/1GB RAM dysk 7200obr./min i obawiam się że tam ww. zapytanie może się wykonywać w 20 sekund jak nie więcej przy małym obciążeniu. Co o tym myślicie, da radę?
Dane techniczne:
- MySQL
tabela relacyjna InnoDB
całkowita wielkość tabeli 60mln rekordów typu varchar