|
|
|
| Добрый день.
Нужно организовать поиск по двум таблицам, условно news и articles. По полям с заголовками. Поля эти в обеих таблицах называются одинаково - header. Очевидный вроде-бы запрос:
SELECT * FROM news, articles WHERE news.header LIKE '%слово%' OR articles.header LIKE '%слово%'
|
выводит дублирующие записи. Попытка осуществить этот запрос со стометровими таблицами привела к зависанию. Подскажите как написать запрос не разбивая его на два | |
|
|
|
|
|
|
|
для: Albatros
(27.07.2009 в 12:03)
| | Структура таблиц news и articles одинаковая? Может проще UNION приспособить? У вас связи между таблицами в запросе нет, а таблицы декартово перемножаются - в таких условиях два отдельных запроса будут исполняться многократно быстрее. | |
|
|
|
|
|
|
|
для: cheops
(27.07.2009 в 12:12)
| | нет, структура разная, некоторые поля только имеют одинаковые названия. А как приспособить UNION ? - Как вы правильно сказали - связей между таблицами не существует и полей по которым их можно было бы связять вроде бы нет. | |
|
|
|
|
|
|
|
для: Albatros
(27.07.2009 в 12:24)
| | А как приспособить UNION ?
я думаю можно попробовать 2 вложенных запроса SELECT (врезультете выборки, чтобы получились одинаковые таблицы) во FROM объединённых UNION и уже из всего этого искать LIKE
но это смотря какой результат нужен, с индексами мне кажется заморочь получиться. | |
|
|
|
|
|
|
|
для: Valick
(27.07.2009 в 12:53)
| | спасибо. Пойду пробовать | |
|
|
|
|
|
|
|
для: Albatros
(27.07.2009 в 13:33)
| | лучше два простых запроса, чем один пятиэтажный | |
|
|
|
|
|
|
|
для: Albatros
(27.07.2009 в 12:03)
| | LIKE - медленно работает
Надо индексируемые поля использовать | |
|
|
|
|
|
|
|
для: Eugene77
(27.07.2009 в 12:23)
| | Каким образом?
Это же полнотекстовый поиск. | |
|
|
|
|
|
|
|
для: Albatros
(27.07.2009 в 12:27)
| | Индексировать поля можно не только текстовые. В одной таблице можно проиндексировать до 32 полей. Другими словами, можно смело проиндексировать все те поля, по которым выбираются или сортируются данные. Хуже от этого не будет. Я думаю. | |
|
|
|
|
|
|
|
для: Рома
(27.07.2009 в 12:40)
| | >Другими словами, можно смело проиндексировать все те поля, по которым выбираются или сортируются данные. Хуже от этого не будет. Я думаю.
Неправильно думаете.
Индексы занимают место (в некоторых случаях даже большее, чем сами записи таблицы).
А операции добавления / удаления /изменения строк занимают время, необходимое для внесения изменений в затрагиваемые индексы.
Это не к тому, что индексы ставить плохо.
А к тому, что делать это нужно осмысленно, а не в ключе "хуже не будет". | |
|
|
|