SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.05.2011 10:04:47

Van777
Участник
Зарегистрирован: 29.04.2011
Сообщений: 6

Выборка из большой таблицы

Уважаемы програмисты!
Кто может мне подсказать такую фичу (правда я не знаю может эта тема где-то у вас на форуме уже затрагивалася, то пускай простят меня уважаемые администраторы этого форума за повтор вопроса).
Разрабатываю быстрый поиск по таблицы прайсов которые загружаются в БД и которая насчитывает свыше 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:

Неактивен

 

#2 02.06.2011 16:05:50

DubrovinAnton
Участник
Зарегистрирован: 11.05.2011
Сообщений: 9

Re: Выборка из большой таблицы

А если делать выборку из таблицы так:

SELECT * FROM table WHERE id>0 LIMIT 20 и тд.?
Для 4000 страницы SELECT * FROM table WHERE id>80000 LIMIT 20

При таком подходе выборка идёт по индексу, а не по всей таблице)

Отредактированно DubrovinAnton (02.06.2011 16:06:40)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson