Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да търся редове, съдържащи подниз?

Е, винаги можете да опитате WHERE textcolumn LIKE "%SUBSTRING%" - но това е гарантирано, че е доста бавно, тъй като вашата заявка не може да направи съвпадение на индекса, защото търсите знаци от лявата страна.

Зависи от типа поле - текстовото поле обикновено няма да бъде запазено като VARCHAR, а по-скоро като (вид) TEXT поле, така че можете да използвате МАЧИВ СРЕЩУ оператор.

За да получите колоните, които не съвпадат, просто поставете NOT пред подобно:WHERE textcolumn NOT LIKE "%SUBSTRING%" .

Дали търсенето е чувствително към малки и малки букви, зависи от начина, по който съхранявате данните, особено какво COLLATION използвате. По подразбиране търсенето ще бъде независимо от главните букви.

Актуализиран отговор, който отразява актуализацията на въпроса:

Казвам, че правим WHERE field LIKE "%value%" е по-бавно от WHERE field LIKE "value%" ако полето на колоната има индекс, но това все пак е значително по-бързо от получаването на всички стойности и филтъра на приложението. И двата сценария:

1/ Ако направите SELECT field FROM table WHERE field LIKE "%value%" , MySQL ще сканира цялата таблица и ще изпрати само полетата, съдържащи "стойност".

2/ Ако направите SELECT field FROM table и след това накарайте приложението си (във вашия случай PHP) да филтрира само редовете със "стойност" в него, MySQL също ще сканира цялата таблица, но ще изпрати всички полета на PHP, който след това трябва да свърши допълнителна работа. Това е много по-бавно от случай №1.

Решение:Моля, използвайте WHERE клауза и използвайте EXPLAIN за да видите изпълнението.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използвайте директивата IN, за да търсите с подготвен оператор

  2. ГРЕШКА 1215:Не може да се добави ограничение за външен ключ, когато се използва ON DELETE SET NULL

  3. Попълнете Datagridview с MySQL данни

  4. Две генерирани ценности в доктрината

  5. Как да изразя a has many чрез връзка в Entity Framework 5?