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

Mysql оптимизация за REGEXP

Ако трябва да използвате WHERE в стил на regexp клаузи, определено ще бъдете измъчвани от проблеми с бавните заявки. За да работи търсенето в стил на regexp, MySQL трябва да сравни всяка стойност в колоната с вашето име с регулярния израз. И вашата заявка удвои проблемите, като разгледа и колоната ви с потребителско име.

Това означава, че MySQL не може да се възползва от никакви индекси, което е начинът, по който всички СУБД ускоряват заявките на големи таблици.

Има няколко неща, които можете да опитате. Всички те включват сбогуване с REGEXP.

Едното е това:

WHERE name LIKE CONCAT('jack', '%') OR username LIKE CONCAT('jack', '%')

Ако създавате индекси в колоните за вашето име и потребителско име, това трябва да бъде прилично бързо. Той ще търси всички имена/потребителски имена, започващи с 'jack'. ЗАБЕЛЕЖЕТЕ, че

WHERE name LIKE CONCAT('%','jack') /* SLOW!!! */

ще търси имена, завършващи с 'jack', но ще бъде бавно като търсенето в стил на регулярни изрази.

Друго нещо, което можете да направите, е да разберете защо приложението ви трябва да може да търси част от име или потребителско име. Можете или да премахнете тази функция от приложението си, или да измислите по-добър начин да се справите с нея.

Възможни по-добри начини:

  1. Помолете потребителите си да разделят имената си на полета за дадено име и фамилия и да търсят отделно.
  2. Създайте отделна функция „търсене във всички потребители“, която се използва само когато потребителят има нужда от нея, като по този начин намалява честотата на вашата бавна заявка в стил на регулярни изрази.
  3. Сами разбийте имената им в отделна таблица с имена и думи, като използвате някаква програма за предварителна обработка. Търсете в таблицата с имена и думи без регулярни изрази.
  4. Разберете как да използвате пълнотекстово търсене на 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. Свързване с отдалечен MySQL сървър с помощта на PHP

  2. Разбъркайте низ с mysql/sql

  3. Синтактична грешка на SQL близо до desc

  4. password_hash, password_verify, MySQL неразбиране?

  5. Копирайте стойности от една колона в друга в същата таблица