powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / поиск по MySQL
23 сообщений из 23, страница 1 из 1
поиск по MySQL
    #33307602
Anton-3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, коллеги. Хотелось бы услышать ваше профессиональное мнение.

У меня есть таблица MySQL. В ней есть порядка 20 маленьких полей (id, даты и все такое) и одно поле типа ‘text’. Сейчас в таблице порядка 10,000 записей. Требуется организовать по этой таблице поиск, хотелось бы узнать как сделать такой поиск эффективным, а главное быстрым?

Если я использую конструкцию:

Код: plaintext
SELECT id,subj FROM $table where active= 1  and body LIKE '%$text%'  OR  subj LIKE '%$text%' OR anonce LIKE '%$text%'  order by id desc

то такой запрос выполняется порядка 0,5 секунд, что есть недопустимым, ведь если таблица будет иметь 100,000 записей и поиском будет пользоваться порядка 50 человек одновременно то это приведет к катастрофе! Как лучше организовать поиск по таблице? Спасибо.
...
Рейтинг: 0 / 0
поиск по MySQL
    #33307618
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Построить индексы и смотреть план выполнения запроса.
...
Рейтинг: 0 / 0
поиск по MySQL
    #33307659
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитать про FULLTEXT в документации. А запросам вида LIKE '%pattern%' никакие индексы не помогут. Сервер просто не сможет ими воспользоваться.
...
Рейтинг: 0 / 0
поиск по MySQL
    #33309293
Anton-3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы. Про индексы и FULLTEXT прочитаю. Но тут возникает второй вопрос, такой индекс будет занимать порядка 30% от таблицы, а место на сервере не безгранично. Или в любом случае нужно жертвовать дисковым пространством ради создания индекса?
...
Рейтинг: 0 / 0
поиск по MySQL
    #33309317
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы видите альтернативы?
...
Рейтинг: 0 / 0
поиск по MySQL
    #33309985
demas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более того, полнотекстовый индекс очень сильно замедляет вставку. Порой в 2 раза.
...
Рейтинг: 0 / 0
поиск по MySQL
    #33310139
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При альтернативе замедление вставки в два раза или замедление поиска в 1000 я выберу первое в большинстве случаев,)
...
Рейтинг: 0 / 0
поиск по MySQL
    #33310847
demas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зависит от соотношения количества вставок и количества запросов на поиск. Так же от требований к производительности.
...
Рейтинг: 0 / 0
поиск по MySQL
    #33312535
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, начнём с того, что при значительной доле вставок при работе с базой, блокировка табличного уровня у MyISAM внесёт куда большее влияние на тормоза, чем полнотекстовый индекс, и для таких таблиц лучше вообще использовать InnoDB. Следовательно, для них полнотекстовый индекс принципиально неприменим,)
...
Рейтинг: 0 / 0
поиск по MySQL
    #33312772
Anton-3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как только сделаю на своем сайте поиск, обязательно сообщу вам о результатах.
...
Рейтинг: 0 / 0
поиск по MySQL
    #33312784
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton-3000У меня есть таблица MySQL. В ней есть порядка 20 маленьких полей (id, даты и все такое) и одно поле типа ‘text’.
а содержимое этого поля какой длины? если разное, то в среднем?
...
Рейтинг: 0 / 0
поиск по MySQL
    #33316669
Anton-3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftа содержимое этого поля какой длины? если разное, то в среднем?

Мне нужно осуществить поиск по полям типа "text" и "varchar".
...
Рейтинг: 0 / 0
поиск по MySQL
    #33323941
Anton-3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вот тут поэкспериментировал с поиском и пришел к выводу, что искать по mysql – нецелесообразно. Объясню:

1) При создании индекса FULLTEXT – он занял размер сопоставимый с самой базой данных!

2) При простом поиске используя LIKE “%search_string%”, поиск занял у меня 0,08 сек., а при использовании MATCH поиск занял 0,008 сек., то есть в 10 раз быстрее. А если использовать в строке запроса еще и order by show_date, то разница очень небольшая.

Поэтому я так думаю, что нужно указать Googl’у почаще заходить на мой сайт, а самому использовать для поиска по сайту тот же Google.

Вот такая грустная картины вырисовывается.
...
Рейтинг: 0 / 0
поиск по MySQL
    #33323948
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите на EXPLAIN для запросов, и поймёте, почему так происходит. Вероятно, при указании ORDER BY приходится использовать временную таблицу. Я вот только одного не пойму, отчего вы так за размер таблицы переживаете? Вы её на дискетах храните чтоли? При том, что гигабайт дискового пространства давно уже и бакса не стоит...
...
Рейтинг: 0 / 0
поиск по MySQL
    #33323956
Anton-3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, посмотрю, но даже если не использовать ORDER BY поиск занимает 0,008 сек., - это много.
...
Рейтинг: 0 / 0
поиск по MySQL
    #33323965
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это много? Вы учитываете, что тут в указании самой цифры погрешность в 12%? Что кроме вас на сервере ещё кто-то что-то делает, всё это даёт флуктуации на порядки больше времени выполнения. Вот будет идти разговор хотя бы о 0.8 секунды -- уже какой-то смысл в нём появится. Будет идти разговор о 8 секундах -- надо будет думать, что с этим делать. А пока это переливание из пустого в порожнее.
...
Рейтинг: 0 / 0
поиск по MySQL
    #33326404
Anton-3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DocAlЭто много? Вы учитываете, что тут в указании самой цифры погрешность в 12%? Что кроме вас на сервере ещё кто-то что-то делает, всё это даёт флуктуации на порядки больше времени выполнения. Вот будет идти разговор хотя бы о 0.8 секунды -- уже какой-то смысл в нём появится. Будет идти разговор о 8 секундах -- надо будет думать, что с этим делать. А пока это переливание из пустого в порожнее.
Я проводил опыты на локальном сервера, кроме меня никто не работал с БД. Вот я и подумал, а что, если поиском одновременно будут пользоваться 100 человек? Это же замедлит работу всей базы? И время выполнения запроса вырастет существенно, как мне кажется.
...
Рейтинг: 0 / 0
поиск по MySQL
    #33326763
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите, я не знаю специфику вашей базы данных, но у вас есть знакомые 100 человек, которые могут регулярно и с точностью, превышающей 0,08 секунды начинать поиск по базе? Знаете, если у вас действительно предполагается такая нагрузка на базу, считать мегабайтики, занятые индексами, просто нелепо.
Теперь насчёт количества записей. Собственно, СУБД и создаются для того, чтобы быстрее и проще манипулировать данными, чем с помошью простого плоского файла. Ваша оценка насчёт линейного увеличения роста времени выполнения запроса по мере роста количества записей верна как раз для плоского файла. Для поиска в БД по индексу скорее характерно логарифмическое нарастание, по крайней мере, пока буфера для ключей адекватны задачам.
...
Рейтинг: 0 / 0
поиск по MySQL
    #33326764
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В предыдущий пост закралась досадная опечатка: следует читать не "0,08 секунды", а "0,008 секунды".
...
Рейтинг: 0 / 0
поиск по MySQL
    #33331925
Anton-3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Тут походу возник еще один вопрос. На локальном компе у меня все отлично работало, но когда я перенес все это дело на сервер – выдает 0 найденных рядов. Индексы на сервере создал, запрос выполняется, но что-то не так. Не подскажете?

Спасибо.
...
Рейтинг: 0 / 0
поиск по MySQL
    #33332072
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорей всего что-то с кодировкой...
Вообще, неплохо бы указывать версии MySQL, задавая такие вопросы...
...
Рейтинг: 0 / 0
поиск по MySQL
    #33333205
Anton-3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sorry. У меня на компе стоит MySQL 3.21 а на сервере MySQL 4.01

Индексы FULLTEXT я на сервере создал, все как и на локальной машине, но почему-то выдает, что нашлось "0" рядов. А вот сам запрос:

Код: plaintext
1.
2.
$query1 = "SELECT * FROM article WHERE MATCH (subj,body,anonce) AGAINST ('Кучма') ORDER BY show_date DESC LIMIT $p,10";
$result1 = MYSQL_QUERY($query1, $link);
$number1  = mysql_num_rows($result1); 


P.S. Благодарен Вам за ответы!
...
Рейтинг: 0 / 0
поиск по MySQL
    #33334151
Anton-3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы были правы! Проблема с кодировками! Если я ищи, к примеру, «Москва» ничего не находит, но если я ищу «Monday» - все работает!

Не подскажите, как решить эту проблему с кодировками?
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / поиск по MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]