A jak byste si takovou optimalizaci představoval? :-))) Dejme tomu, že bych měl tabulku knih se sloupcem Obsah, kde by byla hodnota třeba
"Výskyt střevlíků v Krkonoších."
Jak by databáze měla optimalizovat "select * from tab where obsah LIKE %střevl%" na "select * from tab where obsah = 'střevl' ??
Ono to ani nejde - like %neco% může najít něco jiného než fulltextový operátor. Like porovnává znak po znaku, kdežto fulltext po tokenech (dalo bz se to přirovnat, ke slovům). K tomu se ještě tokeny převádí na lexémy - fulltext dohledá žlutý, žluté, žlutá - to může být (podle nastavení) jeden token.
Existuje metoda, jak připravit index, který by dokázal akcelerovat vyhledání podřetězců v řetězci. Má jen jednu dost velkou vadu. Výsledný index je řádově větší než indexovaná data.
Tak existují samozřejmě databáze které fulltext přímo obsahují, ale dává to pochopitelně obecně jiné výsledky než LIKE operátor. Otázkou je čeho chcete dosáhnout - většina problematických použití LIKE se kterými jsem se setkal byla triviálním pokusem o fulltext.
A k tomu už existují vhodnější projekty - ať už tsearch2, nebo například Lucene (osobně dávám přednost Lucene, ačkoliv jsem velký příznivec PostgreSQL).
Autor příspěvku se možná snažil říci, že pokud hledáte '%střevl%', tak výsledek musí obsahovat i výsledek hledání 'střevl%' a '%střevl'. DB může tyhle věci vracet na prvním místě, protože se k nim díky indexu dostane výrazně rychleji, než k '%střevl%'. Kdo si počká, dočká se nakonec i výsledků hledání '%střevl%'.
V praxi to samozřejmě nemá moc význam, datový model musí být slušně navržený.
Což je ovšem úplně k ničemu pokud ty výsledky chcete třídit podle daného sloupce (například podle ID). V tom případě musí databáze stejně načíst všechny výsledky, setřídit a až potom může vracet uživateli.
Nehledě na to že problematická použití LIKE operátoru se většinou týkají větších textů (například popisy výrobků v e-shopu), zhusta HTML formátovaných, takže pravděpodobnost že najdete dané slovo hned na začátku textu je mizivá (už proto že tam nejspíš bude nějaká HTML značka).
Ano, ta databáze je tak "blbá" že vám tuto nesmyslnou optimalizaci neprovede. Ono totiž ty dvě podmínky nejsou ekvivalentní.
Některé LIKE dotazy optimalizovat lze (například postfixové dotazy, tj. dotazy "retezec%" lze optimalizovat pomocí indexů), ale většina je bohužel "neoptimalizovatelná" :-(