Ако имате нужда от сложни функции за търсене, използвайте решение за пълнотекстово търсене.
В 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.