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

Regexp и mysql:има ли оператор И

Ако имате нужда от сложни функции за търсене, използвайте решение за пълнотекстово търсене.

В MySQL вграденият индекс за пълнотекстово търсене функцията работи само в механизма за съхранение на MyISAM. Това е жалко, защото InnoDB е предпочитаната машина за съхранение за всички MySQL таблици. InnoDB в последните версии на MySQL е по-бърз от MyISAM в повечето случаи и има по-добри функции за възстановяване при срив от MyISAM.

Има изявления от екипа на разработчиците на MySQL, че възнамеряват да внедрят пълнотекстов индекс за InnoDB. Но ние сме много месеци или дори години далеч от това да стане достъпно и със сигурност ще изисква надграждане до някоя по-късна версия на MySQL.

Ако трябва да използвате пълнотекстови индекси на MyISAM, бих предложил да съхранявате данните си предимно в InnoDB и след това да съхранявате копие на текста за търсене в таблица MyISAM.

Можете също да използвате външно решение като Sphinx Search или Apache Solr за предоставяне на възможности за пълнотекстово търсене външно в базата данни. Има дори начин да използвате Sphinx Search индекс чрез интерфейса на MySQL pluggable storage engine .

Не обичам да използвам LIKE със заместващи знаци или REGEXP за пълнотекстови търсения. Тези решения изискват пълно сканиране на таблици за всяко търсене и в зависимост от обема на вашите данни, работят стотици или хиляди пъти по-бавно, отколкото ако имате индекс.

Написах сравнение на решения за пълнотекстово търсене за MySQL в моята презентация, "Практично пълнотекстово търсене в MySQL ,", а също и в глава от моята книга SQL Antipatterns:Избягване на клопките на програмирането на бази данни .

актуализация:MySQL 5.6 в момента е в процес на разработка (от февруари 2012 г.) и внедрява пълнотекстово индексно решение за InnoDB.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL изчисление за намиране на времева разлика

  2. Подаване на името на таблицата като параметър на подготвената инструкция

  3. Как мога да филтрирам символите на емоджи от моя вход, за да мога да запиша в MySQL <5.5?

  4. Как да вмъкнете обект (повече от 10 свойства) в mysql чрез mybatis въз основа на анотация без списък на всички свойства

  5. Качване на голяма mysql база данни на AWS RDS с помощта на замазка - „MySQL сървърът е изчезнал“