|
|
|
Эффективный поиск
|
|||
|---|---|---|---|
|
#18+
Добрый день, У меня возник следующий вопрос по поводу организации поиска по базе данных. В данный момент я представлю это себе так: 1.берём список всех таблиц в который нада будет искать 2.начинаем их перебирать одна за другой, берем самую первую 3.ищем хитрым запросом сначала в столбце 1 потом 2 итд(fulltext searching)... 4.переходим к следующей таблице и так до конца. Скажите насколько правилен мой подход, есть ли варианты по-эффективнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2005, 14:08:22 |
|
||
|
Эффективный поиск
|
|||
|---|---|---|---|
|
#18+
А что у вас хранится в разных таблицах, что искать приходится по всем им? И вопрос по пункту 3: почему "хитрым запросом" надо искать по различным столбцам отдельно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2005, 20:00:24 |
|
||
|
Эффективный поиск
|
|||
|---|---|---|---|
|
#18+
Да разная инофрмация хранится по разным таблицам, например есть таблица новсти с полями как заголовок и тело новости, вот занчит придется искать уже по двум столбцам таблицы. И далее есть таблица статьи, итд... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2005, 20:40:40 |
|
||
|
Эффективный поиск
|
|||
|---|---|---|---|
|
#18+
А в чём принципиальное отличие новостей и статей? В принципе, можно было бы и в одной таблице хранить... Но с такой структурой -- да, придётся искать в разных. Результаты поиска можно объединить UNIONом, скажем, если версия MySQL позволяет. Касательно же поиска отдельно в заголовке и тексте -- это нужно если только вы действительно хотите искать отдельно в заголовке, и отдельно в тексте. Если же явного такого намерения нету -- то Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2005, 20:47:49 |
|
||
|
Эффективный поиск
|
|||
|---|---|---|---|
|
#18+
DocAlА в чём принципиальное отличие новостей и статей? На уровне хранения даных разницы нет, но на логическом уровне в новостаях хранятся новости а в статьях статии. Говоря простым языком порядка больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2005, 21:05:08 |
|
||
|
Эффективный поиск
|
|||
|---|---|---|---|
|
#18+
У этой проблемы есть несколько аспектов. (даже не считая ваши выпады в соседней ветке на эту тему ,) ) Во-первых, fulltext реализован только для таблиц типа MyISAM, и если вы так заботитесь о целостности данных, это повод минимизировать использование этого типа таблиц, а точнее, объём хранящихся в них данных в БД. Во-вторых, мой и ваш взгляд на вопрос отличается уровнем абстрагированности. С моей точки зрения, что статья, что новость, что комментарий, что личное сообщение -- все они обладают такими арибутами как заголовок, автор, время написания, собственно текст. Для всех них пользователь ожидает возможности поиска по содержимому и заголовку. Конечно, при поиске по личным сообщениям необходимо наложить ограничение "видимости" для пользователя, осуществляющего поиск. Однако же, это единообразно структурированная сущность, под которую разумно выделить таблицу. Третий аспект этой проблемы -- это поведение MySQL в том случае, если на столбец в таблице накладывается условие NOT NULL. Дело в том, что будучи СУБД, работающей как с транзакционными таблицами, так и таблицами, транзакции не поддерживающими, в случае, когда в запросе INSERT/UPDATE/REPLACE для записи не указано содержимое поле с атрибутом NOT NULL, сервер ведёт себя не совсем ожидаемым образом -- он не возвращает ошибку, а записывает в такое поле "умолчальное" значение, например 0 для целочисленного типа, пустую строку для символьного и т.п. Причём в стабильной версии такое поведение характерно для всех таблиц, даже поддерживающих ROLLBACK. В бете 5 ветки изменить такое поведение, кажется, возможно, но бета -- она бета и есть. Таким образом, сохранение целостности данных вроде "обязательного указания автора статьи" этим аттрибутом не добиться, и всё равно это придётся отрабатывать на клиенте, и плодить множество таблиц под новости отдельно, под статьи отдельно смысла нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2005, 00:14:32 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=648&tid=1853659]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 373ms |

| 0 / 0 |
