Что случилось с:
$term = $_POST['search'];
function buildQuery($exploded,$count,$query)
{
if(count($exploded)>$count)
{
$query.= ' AND column LIKE "%'. $exploded[$count] .'%"';
return buildQuery($exploded,$count+1,$query);
}
return $query;
}
$exploded = explode(' ',$term);
$query = buildQuery($exploded,1,
'SELECT * FROM table WHERE column LIKE "%'. $exploded[0] .'%"');
и затем запросите дб для получения результатов в определенном порядке, вместо того, чтобы использовать myIsam-единственное соответствие sql... против?
Это бездельничало бы производительность существенно?
Разница в алгоритме, который MySQL использует для поиска ваших данных за кулисами. Полнотекстовый поиск также позволяет выполнять сортировку по релевантности. Поиск LIKE
в большинстве случаев будет выполнять полное сканирование таблицы, поэтому в зависимости от объема данных вы можете увидеть проблемы с производительностью. Полнотекстовый движок также может иметь проблемы с производительностью при работе с большими наборами строк.
С другой стороны, я бы добавил в этот код кое-что, чтобы избежать разобранных значений. Возможно, вызов mysql_real_escape_string ()
Вы можете посмотреть мою последнюю презентацию для университета MySQL:
http://forge.mysql.com/wiki/Practical_Full-Text_Search_in_MySQL
Слайды также здесь:
http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql
В моем тесте использование LIKE '%pattern%'
было более чем в 300 раз медленнее, чем использование индекса MySQL FULLTEXT
. Мои тестовые данные составили 1.5 миллиона сообщений из дампа данных StackOverflow October