Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wyszukiwać wiersze zawierające podciąg?

Cóż, zawsze możesz spróbować WHERE textcolumn LIKE "%SUBSTRING%" - ale na pewno będzie to dość powolne, ponieważ twoje zapytanie nie może dopasować indeksu, ponieważ szukasz znaków po lewej stronie.

Zależy to od typu pola - obszar tekstowy zwykle nie zostanie zapisany jako VARCHAR, ale jako (rodzaj) pole TEKSTOWE, więc możesz użyć PASUJ PRZECIW operatora.

Aby uzyskać kolumny, które nie pasują, po prostu umieść NOT przed następującym:WHERE textcolumn NOT LIKE "%SUBSTRING%" .

To, czy w wyszukiwaniu jest rozróżniana wielkość liter, czy nie, zależy od tego, w jaki sposób przechowujesz dane, a zwłaszcza od używanej funkcji COLLATION. Domyślnie w wyszukiwaniu nie jest rozróżniana wielkość liter.

Zaktualizowana odpowiedź odzwierciedlająca aktualizację pytania:

Mówię, że robię WHERE field LIKE "%value%" jest wolniejsze niż WHERE field LIKE "value%" jeśli pole kolumny ma indeks, ale nadal jest to znacznie szybsze niż pobieranie wszystkich wartości i filtrowanie aplikacji. Oba scenariusze:

1/ Jeśli wykonasz SELECT field FROM table WHERE field LIKE "%value%" , MySQL przeskanuje całą tabelę i wyśle ​​tylko pola zawierające „wartość”.

2/ Jeśli wykonasz SELECT field FROM table a następnie niech twoja aplikacja (w twoim przypadku PHP) filtruje tylko wiersze zawierające "wartość", MySQL przeskanuje również całą tabelę, ale wyśle ​​wszystkie pola do PHP, który następnie musi wykonać dodatkową pracę. To znacznie wolniej niż w przypadku 1.

Rozwiązanie:użyj WHERE klauzuli i użyj EXPLAIN aby zobaczyć występ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. funkcja php nie zwraca wszystkich wyników z zapytania MySQL w foreach

  2. Czy mogę stworzyć bazę danych używając PDO w PHP?

  3. Ignoruj ​​poszczególne kryteria GDZIE

  4. Konwertuj uniksowy znacznik czasu na datę czytelną dla człowieka za pomocą MySQL

  5. Jak usunąć końcowe białe znaki w MySQL?