|
|
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, коллеги. Хотелось бы услышать ваше профессиональное мнение. У меня есть таблица MySQL. В ней есть порядка 20 маленьких полей (id, даты и все такое) и одно поле типа ‘text’. Сейчас в таблице порядка 10,000 записей. Требуется организовать по этой таблице поиск, хотелось бы узнать как сделать такой поиск эффективным, а главное быстрым? Если я использую конструкцию: Код: plaintext то такой запрос выполняется порядка 0,5 секунд, что есть недопустимым, ведь если таблица будет иметь 100,000 записей и поиском будет пользоваться порядка 50 человек одновременно то это приведет к катастрофе! Как лучше организовать поиск по таблице? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2005, 22:24:32 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Построить индексы и смотреть план выполнения запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2005, 22:45:50 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Прочитать про FULLTEXT в документации. А запросам вида LIKE '%pattern%' никакие индексы не помогут. Сервер просто не сможет ими воспользоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2005, 00:31:28 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы. Про индексы и FULLTEXT прочитаю. Но тут возникает второй вопрос, такой индекс будет занимать порядка 30% от таблицы, а место на сервере не безгранично. Или в любом случае нужно жертвовать дисковым пространством ради создания индекса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2005, 15:13:54 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
А вы видите альтернативы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2005, 15:19:44 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Более того, полнотекстовый индекс очень сильно замедляет вставку. Порой в 2 раза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2005, 18:13:23 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
При альтернативе замедление вставки в два раза или замедление поиска в 1000 я выберу первое в большинстве случаев,) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2005, 19:15:04 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Зависит от соотношения количества вставок и количества запросов на поиск. Так же от требований к производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2005, 10:34:35 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Ну, начнём с того, что при значительной доле вставок при работе с базой, блокировка табличного уровня у MyISAM внесёт куда большее влияние на тормоза, чем полнотекстовый индекс, и для таких таблиц лучше вообще использовать InnoDB. Следовательно, для них полнотекстовый индекс принципиально неприменим,) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2005, 18:10:53 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Как только сделаю на своем сайте поиск, обязательно сообщу вам о результатах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2005, 22:38:17 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Anton-3000У меня есть таблица MySQL. В ней есть порядка 20 маленьких полей (id, даты и все такое) и одно поле типа ‘text’. а содержимое этого поля какой длины? если разное, то в среднем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2005, 22:55:47 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
miksoftа содержимое этого поля какой длины? если разное, то в среднем? Мне нужно осуществить поиск по полям типа "text" и "varchar". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2005, 11:04:55 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Я вот тут поэкспериментировал с поиском и пришел к выводу, что искать по mysql – нецелесообразно. Объясню: 1) При создании индекса FULLTEXT – он занял размер сопоставимый с самой базой данных! 2) При простом поиске используя LIKE “%search_string%”, поиск занял у меня 0,08 сек., а при использовании MATCH поиск занял 0,008 сек., то есть в 10 раз быстрее. А если использовать в строке запроса еще и order by show_date, то разница очень небольшая. Поэтому я так думаю, что нужно указать Googl’у почаще заходить на мой сайт, а самому использовать для поиска по сайту тот же Google. Вот такая грустная картины вырисовывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 01:13:28 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Посмотрите на EXPLAIN для запросов, и поймёте, почему так происходит. Вероятно, при указании ORDER BY приходится использовать временную таблицу. Я вот только одного не пойму, отчего вы так за размер таблицы переживаете? Вы её на дискетах храните чтоли? При том, что гигабайт дискового пространства давно уже и бакса не стоит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 02:05:33 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Спасибо, посмотрю, но даже если не использовать ORDER BY поиск занимает 0,008 сек., - это много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 02:36:37 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Это много? Вы учитываете, что тут в указании самой цифры погрешность в 12%? Что кроме вас на сервере ещё кто-то что-то делает, всё это даёт флуктуации на порядки больше времени выполнения. Вот будет идти разговор хотя бы о 0.8 секунды -- уже какой-то смысл в нём появится. Будет идти разговор о 8 секундах -- надо будет думать, что с этим делать. А пока это переливание из пустого в порожнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 03:56:58 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
DocAlЭто много? Вы учитываете, что тут в указании самой цифры погрешность в 12%? Что кроме вас на сервере ещё кто-то что-то делает, всё это даёт флуктуации на порядки больше времени выполнения. Вот будет идти разговор хотя бы о 0.8 секунды -- уже какой-то смысл в нём появится. Будет идти разговор о 8 секундах -- надо будет думать, что с этим делать. А пока это переливание из пустого в порожнее. Я проводил опыты на локальном сервера, кроме меня никто не работал с БД. Вот я и подумал, а что, если поиском одновременно будут пользоваться 100 человек? Это же замедлит работу всей базы? И время выполнения запроса вырастет существенно, как мне кажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2005, 13:21:22 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Простите, я не знаю специфику вашей базы данных, но у вас есть знакомые 100 человек, которые могут регулярно и с точностью, превышающей 0,08 секунды начинать поиск по базе? Знаете, если у вас действительно предполагается такая нагрузка на базу, считать мегабайтики, занятые индексами, просто нелепо. Теперь насчёт количества записей. Собственно, СУБД и создаются для того, чтобы быстрее и проще манипулировать данными, чем с помошью простого плоского файла. Ваша оценка насчёт линейного увеличения роста времени выполнения запроса по мере роста количества записей верна как раз для плоского файла. Для поиска в БД по индексу скорее характерно логарифмическое нарастание, по крайней мере, пока буфера для ключей адекватны задачам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2005, 01:35:08 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
В предыдущий пост закралась досадная опечатка: следует читать не "0,08 секунды", а "0,008 секунды". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2005, 01:37:04 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Тут походу возник еще один вопрос. На локальном компе у меня все отлично работало, но когда я перенес все это дело на сервер – выдает 0 найденных рядов. Индексы на сервере создал, запрос выполняется, но что-то не так. Не подскажете? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2005, 01:59:46 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Скорей всего что-то с кодировкой... Вообще, неплохо бы указывать версии MySQL, задавая такие вопросы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2005, 08:52:57 |
|
||
|
поиск по MySQL
|
|||
|---|---|---|---|
|
#18+
Sorry. У меня на компе стоит MySQL 3.21 а на сервере MySQL 4.01 Индексы FULLTEXT я на сервере создал, все как и на локальной машине, но почему-то выдает, что нашлось "0" рядов. А вот сам запрос: Код: plaintext 1. 2. P.S. Благодарен Вам за ответы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2005, 14:40:11 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=33312772&tid=1853529]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
23ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 286ms |

| 0 / 0 |
