Muhandis: Исходник: CSV файл с более чем 4,5 млн записей. Само собой без индекса поиск происходит очень медленно: в течении около 5-7 секунд.
Как искали? Обычный grep пробовали?
grep "SUBSTRING" file.csv
После первого вызова файл закешируется и последующие поиски будут быстрее. Ну или для надежности положить файл в рам (tmpfs).
LIKE - не использует индексы.
Muhandis: подстрока может содержать только цифробуквенный символы и знак '-', поэтому для FULLTEXT, казалось, самое то
Как вариант, соэдать дополнительное текстовое поле(или varchar), которое будет содержать только "цифробуквенный символы и знак '-'" разделяемые пробелами, если их несколько. Именно по этому полю и делать полнотекстовый поиск.
EXECUTE Syntax :)
теперь ищем по всем столбцам с помощью OR.
Одной конструкцией по всем столбцам искать нельзя, либо пишите процедуру на SQL.
Можно CONCAT-ом выкрутиться, только нужно явно перечислить столбцы
Особо не вникал, но бросилось в глаза: .*
Замените его на .*? т.е.
Ну а зачем он нужен?) какие-то скрипты, слайд шоу, фотографии, вобщем кусок мусора
Наугад открыл несколько сайтов юкоза - тоже похожий код...
Купите нормальный хостинг и мусора не будет.
А так - это плата за "бесплатное". Сами уберете "мусор" - уберут Ваш сайт. (с) Фрихост.
Из того, что сразу бросилось в глаза: (думаю mysqltuner это подтвердит)
max_connections = 100
query_cache_size = 64M
IMHO, 100 коннектов - сильно с запасом, хватит и 50
64M на кеш запросов - очень мало, выделите хотя бы 192M (если память позволяет, то и больше)
вот не получается никак
Нужный Вам результат находится в $out[1], т.е.
Не-а, не пробовал. Но пробовал обычные функции поиска в прикладной программе: достаточно долго. Поэтому наверное тоже не то.
а попробуйте, будете удивлены :)
если лень програмить, просто в консоле скажите
на выходе будет результат + покажет время выполнения.
запустите пару раз, можно с разными строками поиска
Смотрите логи вебсервера.
Дальше одно из двух: либо прогеры накосячили либо хостинг.
Может быть обходной вариант?
http://www.sql.ru/forum/430173/kolichestvo-vhozhdeniy-podstroki-v-stroku
Ещё предлагают использовать готовые функции:
http://myrusakov.ru/how-to-find-substring-in-string-sql.html
Первый вариант - жесть, даже проверять не стал, LIKE будет быстрее.
Второй вариант попробовал на мелкой табличке 40тыс записей, время выполнения:
LOCATE - 0,12 сек
LIKE - 0.08 сек
т.е. LIKE тоже быстрее
Исходник: CSV файл с более чем 4,5 млн записей. Само собой без индекса поиск происходит очень медленно: в течении около 5-7 секунд.
Как искали? Обычный grep пробовали?
После первого вызова файл закешируется и последующие поиски будут быстрее. Ну или для надежности положить файл в рам (tmpfs).
LIKE - не использует индексы.
подстрока может содержать только цифробуквенный символы и знак '-', поэтому для FULLTEXT, казалось, самое то
Как вариант, соэдать дополнительное текстовое поле(или varchar), которое будет содержать только "цифробуквенный символы и знак '-'" разделяемые пробелами, если их несколько. Именно по этому полю и делать полнотекстовый поиск.