как лучше всего получить приблизительное количество результатов поиска по запросу?
-
03-07-2019 - |
Вопрос
Чтобы описать это подробнее, если у меня есть карта изображений региона, при нажатии на которую выполняется запрос для получения дополнительной информации об этом регионе.
мой клиент хочет, чтобы я отображал приблизительное количество результатов поиска при наведении курсора на карту изображения этого региона.
моя проблема в том, как мне кэшировать?или получить это число без сильного исчерпания ресурсов памяти моего сервера?
Кстати, я использую php и mysql, если это необходимая информация.
Решение
Вы можете периодически выполнять запрос, а затем сохранять результаты (например, в другой таблице).
Результаты не будут абсолютно актуальными, но будут хорошим приближением и снизят нагрузку на сервер.
Другие советы
MySQL может предоставить вам приблизительное количество строк, которые будут возвращены вашим запросом, без фактического выполнения запроса.Для этого нужен синтаксис EXPLAIN.
Вы запускаете запрос с EXPLAIN перед SELECT, а затем умножаете все результаты в столбце строк.
Точность сильно варьируется.Он может работать с некоторыми типами запросов, но бесполезен для других.Он использует статистику ваших данных, которую хранит оптимизатор MySQL.
Примечание:периодическое использование таблицы ANALYZE TABLE (т. е. раз в месяц) может помочь повысить точность этих оценок.
Вы можете создать еще одну таблицу с идентификаторами регионов, а затем создать сценарий, который будет медленно обрабатывать все регионы (например, ночью) и заполнять эту дополнительную таблицу данными.
Затем, когда вы наводите курсор, вы получаете идентификатор из этой новой таблицы, и ей не более одного дня.
Проблема может заключаться в том, что у вас нет медленного времени или что прогон, выполняемый ночью, занимает много времени и очень трудоемок.
ИЗМЕНИТЬ свой комментарий.
Возьмите большой регион или страну, если можете, выполните запрос к этому региону в выбранном вами SQL-браузере и посмотрите, сколько времени это займет.
Если это слишком много, вы могли бы распределить его так, чтобы определенные страны выполняли его в определенные часы: малые страны вместе и большие страны по отдельности в определенный период.
Вас беспокоит, что вы вообще не хотите обращаться к базе данных за этой информацией, когда происходит событие непрерывного повтора, или вы думаете, что запрос будет слишком медленным, и вам нужна информация из базы данных, но быстрее? ?
Если у вас медленный запрос, вы можете настроить его или использовать некоторые другие уже предложенные предложения.
В качестве альтернативы, чтобы вообще избежать попадания в базу данных, кажется, что у вас есть конечное число регионов на этой карте, и вы можете периодически запускать запрос для всех регионов и сохранять числа в памяти.