Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени суток, учусь работать с php + mysql, и получил задание: Создай 2 таблицы Mysql. Первая (id,title,text) - это таблица с контентом. Заполни 3-4 позиции любыми данными
Вторая таблица будет индексной. Ее предназначение - организация поиска. Я хочу чтобы ты:
1) создал структуру индексной таблицы
2) использовал ее для поиска в контенте. Т.е. тебе надо написать скрипт поиска, можешь использовать любой метод - match или like, главное чтобы поиск не затрагивал основную таблицу контента, а все делал через индексную. Почитай и разберись что это такое, зачем это нужно и как такое можно реализовать. Но так и не понял как создается структура этой таблицы, и для чего она нужна. Помогите пожалуйста!
Неактивен
Кто-то очень добрый Вам дал такое задание. Я бы просто добавил полнотекстовый
индекс на основную таблицу
Идея индексной таблицы состоит в том, чтобы быстро искать данные в разных таб-
лицах. В случае с одной таблицей смысла в этом немного, но можете попробовать,
например, такую штуку:
CREATE TABLE index_table (data TEXT NOT NULL, id INT NOT NULL, FULLTEXT(data));
INERT INTO index_table SELECT title, id FROM data_table;
INERT INTO index_table SELECT text, id FROM data_table;
SELECT id FROM index_table WHERE MATCH ('привет') AGAINST (data);
Но, кажется, это страшный никому не нужный костыль. Подозреваю, что ответ
«страшный никому не нужный костыль в данном случае» — это призовое очко
при сдаче зачета
Неактивен
Смысл в том, что я только учусь и он дал мне это задание чтобы я в этом розобрался, дале на практике таблиц будет много. А можете прокоментировать что где делаеться в вашем скрипте, потому как в php я хоть немного разобрался, а в sql не очень.
Неактивен
Интересуют такие вопросы : что делает inert, даные в индексную таблицу заносятся один только раз или при каждом запросе, как получить результат с поиска, для многиг таблиц скрипт такой же, только с добавлением полей или иной?
Отредактированно slavanau (19.01.2011 16:37:08)
Неактивен
Книжку по СУБД почитайте, это всё равно будет нужно.
В данном примере добавление одноразовое, но в реальной жизни нужно, конечно,
поддерживать индексную таблицу актуальной. По сути — это денормализация,
а любую денормализацию нужно поддерживать.
В примере запросы, соответственно, создать таблицу, добавить данные (две строки),
поискать.
Неактивен
Ну, хоть убейте не пойму за щет чего прирост скорости? Ведь даные переносятся с одной таблицы в иную, после чего вытягиваются так же как из первой. Да, и вы вроде бы вместо INSERT написали INERT, и попутали местами значение в match и against.
Отредактированно slavanau (19.01.2011 21:23:23)
Неактивен
В данном примере не будет никакого прироста скорости. Будет наоборот замедление.
Вообще смысла в индексных таблицах очень немного
В качестве разумного исключения — использование разных хранилищ для таблиц.
Например, хранение основных данных в InnoDB, а данных, по которым нужно произ-
вести поиск — в MyISAM (для того, чтобы можно было использовать полнотекстовый
индекс). Или даже sphinx как такой хитрый способ организации индексной таблицы.
В MATCH действительно мог ошибиться, дело же не в синтаксисе, правда?
Кстати, надо понимать, что в других СУБД есть отдельные понятия индексной таблицы
(например, в Oracle) — это таблицы, которые состоят только из индекса. Но для Вашей
задачи этот термин не подходит.
Неактивен