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

Jak hledat řádky obsahující podřetězec?

Vždy můžete zkusit WHERE textcolumn LIKE "%SUBSTRING%" - ale je zaručeno, že to bude dost pomalé, protože váš dotaz nemůže provést shodu indexu, protože hledáte znaky na levé straně.

Záleží na typu pole – textová oblast se obvykle neuloží jako VARCHAR, ale spíše jako (druh) pole TEXT, takže můžete použít Zápas PROTI operátor.

Chcete-li získat sloupce, které se neshodují, jednoduše vložte NOT před podobný výraz:WHERE textcolumn NOT LIKE "%SUBSTRING%" .

Zda se při vyhledávání rozlišují velká a malá písmena, závisí na tom, jak data skladujete, zejména na tom, jaké COLLATION používáte. Ve výchozím nastavení bude vyhledávání nerozlišovat malá a velká písmena.

Aktualizovaná odpověď, aby odrážela aktualizaci otázky:

Říkám, že uděláte WHERE field LIKE "%value%" je pomalejší než WHERE field LIKE "value%" pokud má pole sloupce index, ale je to stále podstatně rychlejší než získání všech hodnot a použití filtru aplikace. Oba scénáře:

1/ Pokud SELECT field FROM table WHERE field LIKE "%value%" , MySQL prohledá celou tabulku a odešle pouze pole obsahující "value".

2/ Pokud provedete SELECT field FROM table a pak nechat svou aplikaci (ve vašem případě PHP) filtrovat pouze řádky s "hodnotou", MySQL také prohledá celou tabulku, ale všechna pole odešle do PHP, které pak musí udělat další práci. To je mnohem pomalejší než případ č. 1.

Řešení:Použijte prosím WHERE klauzuli a použijte EXPLAIN abyste viděli výkon.



  1. Co to znamená, když řeknu, že Připravený výpis je předkompilován?

  2. Jak SUBTIME() funguje v MariaDB

  3. Chyba Sloupec dotazu SQL neexistuje

  4. Jak odstranit revize příspěvků pomocí WP-CLI