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

czy możemy uniknąć elokwentnego w dużej ilości rekordów?

Przyjrzyjmy się jednej części tego.

if(!empty($filter['keyword'])) {
   $leads=$leads->where(function ($q) use ($filter) {
          $q->where('ld_name','like', "%".$filter['keyword']."%")
            ->orWhere('ld_email','like', "%".$filter['keyword']."%")
            ->orWhere('ld_phoneno','like', "%".$filter['keyword']."%");
       });
 }

Ten schemat dopasowywania słów kluczowych jest z natury i katastrofalnie powolny. Jest powolny zarówno w Eloquent, jak i natywnym SQL. Nie ma możliwości, aby działał w MySQL bez wykonania pełny skan tabeli . Oznacza to, że musi sprawdzać każdy wiersz tabeli w poszukiwaniu dopasowań i nie może, w MySQL, wykorzystywać żadnego indeksowanego schematu wyszukiwania. Dlaczego?

column LIKE 'constant%'

może spojrzeć na indeks w column i szybko znajdź dowolną wartość zaczynającą się od 'constant' . Ale

column LIKE '%constant%'

musi spojrzeć na każdą wartość w tabeli. Wiodący % sprawia, że ​​wyszukiwanie indeksu jest bezużyteczne.

W MySQL dobrze byłoby zbadać wyszukiwanie FULLTEXT w MySQL jako sposób obsługi wyszukiwania słów kluczowych. (Najnowsze wersje postgreSQL mogą obsługiwać tego rodzaju zapytania bezpośrednio z innym rodzajem indeksu, ale nie MySQL.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyjątek w związku z mysql przez jdbc

  2. Czy mogę cofnąć tabelę ALTER w - MySQL?

  3. Jak stworzyć relację wiele do wielu w SQLAlchemy (python, flask) dla modelu użytkownika do siebie?

  4. Odwołanie do obiektu, c#

  5. Odmowa dostępu dla użytkownika 'root'@'localhost' (przy użyciu hasła:Tak) po zresetowaniu hasła LINUX