admak

Рейтинг
130
Регистрация
19.07.2010
proksey-net:
теперь ищем по всем столбцам с помощью OR.
Одной конструкцией по всем столбцам искать нельзя, либо пишите процедуру на SQL.

Можно 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))?
pv2903:
Ну а зачем он нужен?) какие-то скрипты, слайд шоу, фотографии, вобщем кусок мусора

Наугад открыл несколько сайтов юкоза - тоже похожий код...

Купите нормальный хостинг и мусора не будет.

А так - это плата за "бесплатное". Сами уберете "мусор" - уберут Ваш сайт. (с) Фрихост.

Из того, что сразу бросилось в глаза: (думаю mysqltuner это подтвердит)

Mister_Black:

max_connections = 100
query_cache_size = 64M

IMHO, 100 коннектов - сильно с запасом, хватит и 50

64M на кеш запросов - очень мало, выделите хотя бы 192M (если память позволяет, то и больше)

Varenik:
вот не получается никак

Нужный Вам результат находится в $out[1], т.е.


preg_match_all ('|<div class=["\']items["\'] id=["\'].*?["\']>(.*?)</div>|is', $text, $out );
print_r($out[1]);
Muhandis:
Не-а, не пробовал. Но пробовал обычные функции поиска в прикладной программе: достаточно долго. Поэтому наверное тоже не то.

а попробуйте, будете удивлены :)

если лень програмить, просто в консоле скажите

time grep "SUBSTRING" file.csv

на выходе будет результат + покажет время выполнения.

запустите пару раз, можно с разными строками поиска

Смотрите логи вебсервера.

Дальше одно из двух: либо прогеры накосячили либо хостинг.

LEOnidUKG:
Может быть обходной вариант?
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 тоже быстрее

Muhandis:
Исходник: CSV файл с более чем 4,5 млн записей. Само собой без индекса поиск происходит очень медленно: в течении около 5-7 секунд.

Как искали? Обычный grep пробовали?

grep "SUBSTRING" file.csv

После первого вызова файл закешируется и последующие поиски будут быстрее. Ну или для надежности положить файл в рам (tmpfs).

LIKE - не использует индексы.

Muhandis:
подстрока может содержать только цифробуквенный символы и знак '-', поэтому для FULLTEXT, казалось, самое то

Как вариант, соэдать дополнительное текстовое поле(или varchar), которое будет содержать только "цифробуквенный символы и знак '-'" разделяемые пробелами, если их несколько. Именно по этому полю и делать полнотекстовый поиск.

Всего: 1235