Как можно оптимизировать данный MySQL запрос?

new_forward

Профессор
Регистрация
5 Май 2008
Сообщения
673
Реакции
44
Доброго времени суток, есть запрос который обрабатывается достаточно долго, бывает до 50 секунд, как его можно оптимизировать?

Код:
SELECT id, autor, date, short_story, SUBSTRING( full_story, 1, 15 ) AS full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate,
FIXED , rating, vote_num, news_read, flag, editdate, editor, reason, view_edit, tags
FROM dle_post
WHERE approve
AND allow_main
AND date < '2015-07-30 01:53:48'
ORDER BY date DESC
LIMIT 20055 , 35
 
На вскидку сделать один индекс на `date`, `allow_main`, `approve`.
Выполни "EXPLAIN EXTENDED твой запрос" и напиши что выводит.
UPD. Из оптимизации - date < '2015-07-30 00:00:00' - т.е. не учитывать время. Так кеш запросов будет дольше хранить. С другой стороны, это потеря точности, и 2) если таких запросов куча, ничего не получим, так как новые будут выбивать старые.
 
Последнее редактирование:
Можно после создания индексов поиграться с параметрами кэша в my.cnf в сторону увеличения, если память позволяет:

Код:
key_buffer_size = 16M
max_allowed_packet = 16M
table_open_cache = 1024
table_cache = 1024
sort_buffer_size = 16M
#read_buffer_size = 256K
#read_rnd_buffer_size = 256K
#net_buffer_length = 4K
thread_stack = 256K
query_cache_size=16M
query_cache_limit=2M
record_buffer = 16M
thread_cache_size = 16
max_sort_length=20
tmp_table_size = 256M
max_heap_table_size = 256M
open_files_limit = 2048
 
Назад
Сверху