2014-01-15 3 views
1

У меня около 4 таблиц, одна из которых составляет около 10 миллионов строк (она увеличивается до 500 тыс. Строк в месяц), таблицы полностью оптимизированы, мой запрос как это:MySQL - InnoDB, кэширует часть запроса для более быстрого времени выполнения

SELECT COUNT(id), select... FROM table1 
INNER JOIN table2 on ..., 
INNER JOIN table3 on ... 
INNER JOIN table 4 on... 
WHERE [ different conditions every time ] 

Этот запрос занимает около 1 минуты времени выполнения (которым слишком долго), и то, что я хочу, чтобы кэшировать первую часть запроса (все но не WHERE), а затем, как только кеш сделан, примените запрос к кешированию where.

Общая идея заключается в том, чтобы выполнить первую часть запроса каждое утро (для Exemple) поместить в кэше этого запрос, чтобы иметь минимальное время выполнения, когда пользователи будут выполнять свои собственные запросы (с оговоркой WHERE)

Я думаю, что это возможно, потому что я пытался «bechnmarking» выполнить запрос без WHERE (около 1 минуты времени выполнения), затем я запустил его с предложением WHERE и получил очень низкое время выполнения, поэтому я думаю, что он работает.

Но мне нужна помощь в этот момент, я не знаю, как увеличить спектакли, как поместить в кэш запрос без where или если у вас есть лучшее решение ...

Спасибо заранее за ваше внимание

+0

Если вы предоставите реальный запрос, схему и дополнительную информацию о своих данных, мы сможем помочь вам в дальнейшем. –

ответ

0

Я думаю, что вы можете подготовить Materialized view для этого запроса

ЧТО материализованное представление? Материализованный вид (MV) - это предварительно вычисленный (материализованный) результат запроса. В отличие от простого VIEW, результат Materialized View хранится где-то, как правило, в таблице. Материализованные представления используются, когда требуется немедленный ответ, и запрос, на который основывается материализованный вид, займет много времени, чтобы создать результат. Материализованные представления нужно обновлять время от времени. Это зависит от требований, как часто обновляется материализованный вид и насколько актуальен его контент. В основном материализованный вид может быть обновлен немедленно или отложен, он может быть обновлен полностью или до определенного момента времени. MySQL не предоставляет материализованные представления самостоятельно. Но сами материализованные представления легко создавать сами.

0

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

Вы также можете использовать CREATE TABLE ... SELECT, чтобы сделать таблицу в первый раз.

Смежные вопросы