SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 29.04.2011 10:38:41

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

Создание запроса!

Кто скажет, можно ли реализовать вот такое:
Есть у меня огромная таблица в которой насчитывается свыше 10 миллионом записей. Мне нужно провести полнотекстовый поиск по этой таблицы по ключевым словам. Результат соответственно может быть большим. Можно ли, к примеру сделать запрос получить ограниченое кол-во записей (к примеру 1000) и поместить этот же результат во временную таблицу с типом MEMORY чтобы тогода можно было с помощью пейджера просматривать результаты рание сделаного запроса во временной таблицы. Так будет быстрее нежели работать с большой таблицей?

Неактивен

 

#2 29.04.2011 12:18:05

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Создание запроса!

Да, такое сделать можно — используйте LIMIT 1000. Листать по этим 1000 строкам
может быть достаточно сложно, т.к. обычно движки сайтов переиспользуют соеди-
нения хаотичным образом (и вероятность того, что «вторая» страница уйдет друго-
му пользователю равна почти единице, если пользователя более одного). Как пра-
вило, в пейджерах используют LIMIT 20,10 для того, чтобы вывести 10 записей
третьей страницы, к примеру (т.е. 20 строк пропустить, потом 10 строк вывести).

Неактивен

 

#3 29.04.2011 13:09:52

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

Re: Создание запроса!

Тоисть поместить результат запроса у временную таблицу и в этой же таблице использовать пейджер, и вместо LIMIT 1000 использовать LIMIT 20,10? Я правильно Вас понял? Так работать будет, постраничная навигация по временной таблице?

Неактивен

 

#4 30.04.2011 15:22:22

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Создание запроса!

Временная таблица хранится только во время жизни подключения. Если Ваш
сценарий переподключается каждый раз, то этой таблицы не будет после пере-
подключения. Если Ваш сценарий использует постоянные соединения, то эта
таблица будет, но когда прийдет другой человек за второй своей страницей —
он получит вторую Вашу, например. Или вторую страницу Васи Пупкина — как
повезет. Потому что соединение будет использовано общее.

Неактивен

 

#5 05.05.2011 09:40:13

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

Re: Создание запроса!

С временной таблице не получется. Единственный выход из сложившейся ситуации (при выборке из большой таблицы которая насчитывает свыше 10-ки милн. строк) это создание обычной MyISAM промежуточной таблицы (к примеру из 5000 строк) в которую нужно помесить результаты отбора из большой табл. и работать с ней как с обычной табл. Проблема лишь в том как эту табл удалить когда пользователь завершил поиск и покинул ресурс. Если пользователей будет много и каждый из них будет производить поиск то таких промежуточных табл. окажется слишком много в БД, и нужно как-то реализовать механизм их удаления (создали - попользовались - удаляем). Может кто-то подскажет как это реализовать. Пока, как мне кажеться. это единственный выход для ускореной работы.

Отредактированно Van777 (05.05.2011 09:41:07)

Неактивен

 

#6 05.05.2011 09:52:12

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Создание запроса!

Обычно каждому поиску присваивается searchid. Создавайте таблицу, содержащую seacrhid и храните, например, только последние 20 таблиц. В этих таблицах не нужно хранить все найденные записи - достаточно будет только id-ников в нужном порядке, поэтому таблицы не будут большими. Скорее всего учет поисков придется вести в отдельной таблице, в этом случае можно организовать хранение таблиц не более заданного времени (например, 2 часа).

Неактивен

 

Board footer

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