Задавайте вопросы, мы ответим
Вы не зашли.
Уважаемы програмисты!
Кто может мне подсказать такую фичу (правда я не знаю может эта тема где-то у вас на форуме уже затрагивалася, то пускай простят меня уважаемые администраторы этого форума за повтор вопроса).
Разрабатываю быстрый поиск по таблицы прайсов которые загружаются в БД и которая насчитывает свыше 10-ка милн. строк. Создал полнотекстовые индексы, скрипт ищет нужные слова в этой огромной таблице. На страницы выводится по 20 строк результата поиска. Но проблема в том, что каждый раз, когда обращаеся к этой большущей табл. (к примеру при пролистывании - пейджер), скрипту приходится перелопачивать большое кол-во строк (несмотря на индексацию). Нашел выход - создать промежуточную табл. (обычную типа MyISAM на 5000 строк) на основе запроса типа:
$id_session = session_id(); // Получаем уникальный id сессии для имени табл. к примеру на уникальность)
CREATE TABLE tmp_$id_session
SELECT prices.id,
prices.typeauto,
prices.marka,
prices.model,
prices.namezapch,
prices.numberkatalog,
prices.maker,
prices.price,
prices.valuta,
prices.deliverydate,
prices.idUser
FROM prices
INNER JOIN pricesAccess ON prices.idUser = pricesAccess.idUser
WHERE
pricesAccess.access = 1
AND MATCH (prices.typeauto, prices.marka, prices.model, prices.namezapch, prices.numberkatalog)
AGAINST ('$searchWord')
ORDER BY price ASC
LIMIT 5000
и помещать туда результаты поиска и затем работать, листать ее как обычно - это намного быстрее чем ковырять огромную таблицу. Но есть "НО". Эти таблицы не удаляются, их нужно ручками удалять, а когда таких поисков будет много то для каждого такого поиска будет создаватся отдельная таблица... Нужно придумать такой механизм, который позволял бы после окончания работы с такими промежуточными табл. удалять их автоматически (идея то возникла - запускать Cron - в определенное время и удалять эти табл.), но может у кого-то из Вас есть более лутчшее решения в даной ситуации. На многих форумах задавал этот вопрос, но так толком никто и не смог подсказать как все таки реализовать поиск (быстрый) имеея огромную таблицу даных! Надеюся на вашу помощь!!!
Спасибо! :0024:
Неактивен
А если делать выборку из таблицы так:
SELECT * FROM table WHERE id>0 LIMIT 20 и тд.?
Для 4000 страницы SELECT * FROM table WHERE id>80000 LIMIT 20
При таком подходе выборка идёт по индексу, а не по всей таблице)
Отредактированно DubrovinAnton (02.06.2011 16:06:40)
Неактивен