как лучше всего получить приблизительное количество результатов поиска по запросу?

StackOverflow https://stackoverflow.com/questions/600972

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

ИЗМЕНИТЬ свой комментарий.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top