У меня очень похожая проблема, которую я пытался оптимизировать, хешируя запросы и сохраняя хэш / результат в таблице CACHE.Но есть и ошибки - например, команды:
SELECT * FROM myTable WHERE (col1 BETWEEN 1000 AND 2000) AND (col2='StackOverflow');
SELECT * FROM myTable WHERE (col2='StackOverflow') AND (col1 BETWEEN 1000 AND 2000);
Должны дать точно такой же ответ, но MD5 с этими двумя строками даст разные результаты.То же самое касается:
SELECT col1,col2 FROM myTable;
SELECT col2,col1 FROM myTable;
Если вы можете стандартизировать, как запросы поступают в базу данных (сортировка SELECTables, фильтры WHERE, группировка и т. Д. - все в нашем PHP / JavaScript), то вы можете надежно быстро хешироватьзапросы, выполните их, а затем сохраните результат в вашей базе данных.Я бы порекомендовал хранить его как JSON, если вы не собираетесь возвращать целые страницы, такие как OP, потому что это избавляет от необходимости конвертировать его позже, а JSON почти всегда архивируется перед отправкой пользователю (если ваш AJAXing на экране пользователя).
Чтобы действительно ускорить это, ваша таблица CACHE должна иметь столбец Hash, включающий тип UNIQUE, чтобы она автоматически индексировалась.
Если вы используете Node.js, то идите на один шаг дальше и скажете, что вы можете прочитать эту таблицу CACHE с диска при запуске, сохранить все хэши в заданном объекте, а затем, когда ваш сервер получит запрос простоdo allHashes.has (hashedSortedQuery).Поскольку эта операция происходит в памяти, она по сути мгновенная.Если это правда, ВЫБЕРИТЕ результат из CACHE, где Hash = 'hashedSortedQuery', иначе (фактический запрос).
Последнее замечание - из моего опыта, сделавшего то же самое, обновление моей версии SQLite имело ОГРОМНОЕ улучшение скорости,и я упоминаю об этом только потому, что часто на серверах общего хостинга последняя версия не всегда установлена.Вот сравнение, которое я сделал сегодня между глобальной версией SQLite, установленной на моем сервере, и последней версией SQLite, скомпилированной из источника: http://pastebin.com/hpWu3UCk