EXECUTE Syntax :)
Можно CONCAT-ом выкрутиться, только нужно явно перечислить столбцы
SELECT * FROM table1 where concat(field1, field2, field3) like '%what%'
Особо не вникал, но бросилось в глаза: .*
Замените его на .*? т.е.
[0-9]{1,40},first_name:.*?,last_name:.[^,]*,sex:2,bdate:[0-9]{1,2}\.[0-9]{1,2}(\.(1985|1986|1987|1988|1989|1990|1991|1992|1993|1994|1995|1996|1997))?
Наугад открыл несколько сайтов юкоза - тоже похожий код...
Купите нормальный хостинг и мусора не будет.
А так - это плата за "бесплатное". Сами уберете "мусор" - уберут Ваш сайт. (с) Фрихост.
Из того, что сразу бросилось в глаза: (думаю mysqltuner это подтвердит)
IMHO, 100 коннектов - сильно с запасом, хватит и 50
64M на кеш запросов - очень мало, выделите хотя бы 192M (если память позволяет, то и больше)
Нужный Вам результат находится в $out[1], т.е.
preg_match_all ('|<div class=["\']items["\'] id=["\'].*?["\']>(.*?)</div>|is', $text, $out );print_r($out[1]);
а попробуйте, будете удивлены :)
если лень програмить, просто в консоле скажите
time grep "SUBSTRING" file.csv
на выходе будет результат + покажет время выполнения.
запустите пару раз, можно с разными строками поиска
Смотрите логи вебсервера.
Дальше одно из двух: либо прогеры накосячили либо хостинг.
Первый вариант - жесть, даже проверять не стал, LIKE будет быстрее.
Второй вариант попробовал на мелкой табличке 40тыс записей, время выполнения:
LOCATE - 0,12 сек
LIKE - 0.08 сек
т.е. LIKE тоже быстрее
Как искали? Обычный grep пробовали?
grep "SUBSTRING" file.csv
После первого вызова файл закешируется и последующие поиски будут быстрее. Ну или для надежности положить файл в рам (tmpfs).
LIKE - не использует индексы.
Как вариант, соэдать дополнительное текстовое поле(или varchar), которое будет содержать только "цифробуквенный символы и знак '-'" разделяемые пробелами, если их несколько. Именно по этому полю и делать полнотекстовый поиск.