sql >> Databáze >  >> RDS >> Mysql

Který SQL dotaz je lepší, MATCH AGAINST nebo LIKE?

Aktualizovat

Od MySQL 5.6 a později InnoDB tabulky podporuje Match... Against .

První je hodně lepší. Na MyISAM tabulky, použije proti těmto sloupcům fulltextový index. Druhý provede úplný sken tabulky, provede concat na každém řádku a poté srovnání.

LIKE je efektivní pouze tehdy, když to děláte proti:

  • sloupec (není výsledkem funkce, pokud váš konkrétní dodavatel databáze nepodporuje funkční indexy – například Oracle – a vy je nepoužíváte);
  • začátek sloupce (tj. LIKE 'blah%' na rozdíl od LIKE '%blah%' ); a
  • sloupec, který je indexován.

Pokud některá z těchto podmínek není pravdivá, jediným způsobem, jak může stroj SQL provést dotaz, je provést úplnou kontrolu tabulky. To může být použitelné pod cca 10-20 tisíci řádky. Kromě toho se však rychle stane nepoužitelným.

Poznámka: Jeden problém s MATCH na MySQL je, že se zdá, že se shoduje pouze s celými slovy, takže hledání 'bla' nebude odpovídat sloupci s hodnotou 'bla', ale hledání 'bla*' ano.




  1. MySQL spoušť nefunguje, jednoduchá syntaxe, nic složitého

  2. Jak vytvořit databázi MySQL a nastavit oprávnění

  3. EM 12c Úprava prahových hodnot

  4. Sloupec vypočítaný z jiného sloupce?