У меня есть идея, которую я еще не претворил в жизнь, потому что у меня есть некоторый страх, что я, возможно, лаю не на том дереве ... в основном потому, что поиск в Google по этой теме дает так мало результатов.
По сути, у меня есть несколько медленных запросов SQL, в значительной степени потому, что они имеют подзапросы, которые отнимают много времени. Например, они могут делать такие вещи, как «подсчитать все велосипеды красного цвета, на которых ездят мальчики в возрасте от 10 до 15 лет». Это дорого, так как оно проходит через все велосипеды, но конечным результатом является одно число. И, в моем случае, мне не нужно, чтобы это число было на 100% актуальным.
Похоже, что окончательным решением проблем такого рода является применение механизма на основе OLAP для предварительного кэширования этих перестановок. Однако в моем случае я на самом деле не пытаюсь нарезать и разбивать данные на тонны метрик, и я бы не хотел усложнять мою архитектуру еще одним запущенным процессом / хранилищем данных.
Итак ... моя идея заключалась в запоминании этих подзапросов в базе данных. У меня может быть таблица с именем «BicycleStatistics», и она может хранить выходные данные этого подзапроса в виде пары «имя-значение» его входов и выходов.
Имя ex: "c_red_g_male_a_10-15" значение: 235
И есть механизм, который запоминает эти значения в этой таблице при выполнении запросов.
Кто-нибудь был в такой ситуации и пробовал что-нибудь подобное? Причина, по которой я думаю, что подобное решение является ценным из-за того, что «бросьте много ОЗУ в вашу БД и дайте базе данных справиться с этим», заключается в том, что (А) моя база данных больше, чем объем ОЗУ, который я могу удобно использовать для этого, и ( Б) база данных будет гарантировать, что я получу точное число для этой статистики, и мой большой выигрыш в том, что я в порядке с числами, которые устаревают на день или два.
Спасибо за любые мысли / отзывы.
Tom