Каков наилучший способ получить приблизительное количество результатов поиска по запросу? - PullRequest
2 голосов
/ 02 марта 2009

для более подробного описания, если у меня есть карта изображения региона, при нажатии которого выполняется запрос для получения дополнительной информации об этом регионе.

Мой клиент хочет, чтобы я отображал приблизительный количество результатов поиска при наведении на карту региона изображения.

Моя проблема в том, как мне кэшировать? или получить это число, не сильно истощая ресурсы памяти моего сервера?

Кстати, я использую php и mysql, если это необходимая информация.

Ответы [ 4 ]

2 голосов
/ 02 марта 2009

Вы можете периодически выполнять запрос и затем сохранять результаты (например, в другой таблице).

Результаты не будут абсолютно современными, но будут хорошим приближением и уменьшат нагрузку на сервер.

1 голос
/ 02 марта 2009

MySQL может дать вам приблизительное количество строк, которые будут возвращены вашим запросом, без фактического выполнения запроса. Вот для чего нужен синтаксис EXPLAIN.

Вы выполняете запрос с «EXPLAIN» перед «SELECT», а затем умножаете все результаты в столбце строк.

Точность сильно варьируется. Он может работать с некоторыми типами запросов, но бесполезен для других. Он использует статистику о ваших данных, которую хранит оптимизатор MySQL.

Примечание: использование ANALYZE TABLE для таблицы периодически (т.е. один раз в месяц) может помочь повысить точность этих оценок.

0 голосов
/ 02 марта 2009

Вы обеспокоены тем, что вообще не хотите обращаться к базе данных за этой информацией, когда происходит событие отката, или вам кажется, что запрос будет слишком медленным и вам нужна информация из базы данных? , но быстрее?

Если у вас медленный запрос, вы можете настроить его или использовать некоторые из уже предложенных предложений.

В качестве альтернативы, и чтобы вообще избежать попадания в базу данных, кажется, что у вас есть конечное число регионов на этой карте, и вы можете периодически выполнять запрос для всех регионов и хранить числа в памяти.

0 голосов
/ 02 марта 2009

Можно создать еще одну таблицу с идентификаторами регионов, а затем создать сценарий, который будет выполняться по всем регионам в медленное время (например, ночью) и заполнять эту дополнительную таблицу данными.

Затем, когда вы наводите курсор мыши, вы получаете идентификатор из этой новой таблицы, и он не более дневного возраста.

Проблема может заключаться в том, что у вас нет медленного времени или что прогон, выполняемый ночью, занимает много времени и очень трудоемок.

РЕДАКТИРОВАТЬ к своему комментарию.

Возьмите большой регион или страну, если можете, сделайте запрос этого региона в выбранном вами браузере SQL и проверьте, сколько времени это займет.

Если это слишком много, вы могли бы распространить его, чтобы определенные страны казнили в определенные часы, небольшие страны вместе и большие страны в определенный период.

...