2016-10-28 2 views
-1

У меня проблема, что я не в состоянии понять .. У меня есть два запроса (база данных MySQL, только один стол со всеми данными СРВ):Звездочка корд проблемы производительности MySQL запросов

SELECT * FROM cdr WHERE userfield LIKE 'audio:%' 
    AND (calldate >= '2016-10-26 00:00:00' 
    AND calldate <= '2016-10-26 23:59:59') 
    AND duration > 8 
ORDER BY uniqueid DESC LIMIT 200 OFFSET 0; 

, который работает в 0,05 секунды и еще один:

SELECT * FROM cdr WHERE userfield LIKE 'audio:%' 
    AND (calldate >= '2016-10-26 15:00:00' 
    AND calldate <= '2016-10-26 16:00:00') 
    AND duration > 8 
ORDER BY uniqueid DESC LIMIT 200 OFFSET 0; 

который проходит в 39.12 секунд !! (обратите внимание, что единственная разница в полях calldate)

Я действительно мало знаю о производительности в MySQL, поэтому я не знаю, с чего начать, может быть, проблема с индексом?

+0

Спасибо, EXPLAIN это хорошее начало, но в данном случае это только одна таблица, так что я не могу играть много с планом выполнения. – Soborno

+0

Я раньше не использовал EXPLAIN, но для того, что я вижу в этом случае, есть только одна строка, а поле возможных_keys и keys совпадает с моим текущим индексом (один над столбцом calldate), поэтому я не знаю действительно что делать (хотя есть поле, которое я не получаю, это поле «Дополнительно», в котором говорится «Использование где: с помощью файлового управления») – Soborno

+0

«Использование filesort» означает, что у вас нет места в памяти для ваших временных таблиц. У вас есть увеличение буфера для сортировки (зависит от типов вашего типа таблицы). – arheops

ответ

0

1) создать индекс для поля calldate (или делать «шоу индекс от корд», чтобы увидеть, если у вас уже есть один

http://dev.mysql.com/doc/refman/5.7/en/show-index.html

2) Создать запрос, который используют индекс.

http://dev.mysql.com/doc/refman/5.7/en/index-hints.html

+0

У меня был указатель, но указательный указатель, который вы указали во второй ссылке, сделал трюк! – Soborno

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