Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Первый в силу того, что при ежесекундном добавлении записей, размер индекса будет равен количеству записей в самой базе.Странный аргумент. В MySQL у любого индекса размер в записях будет равен количеству записей в таблице (а не в базе, кстати) и независимо от интенсивности вставки.
Выполним запрос:План запроса смотрели?
SELECT * FROM CDR WHERE src=***** AND calldate>'2016-06-21' AND calldate<'2016-06-22';
/* Affected rows: 0 Найденные строки: 4 Предупреждения: 0 Длительность 1 query: 00:09:36 */
Почти 10 минут ожидания.
у любого индекса размер в записях будет равен количеству записей в таблице
План запроса смотрели?
Имхо, хватило бы индекса (src,calldate). Поля в индексе должны быть именно в таком порядке, чтобы диапазон по calldate работал.
MySQL может использовать только один индекс за разВ сформулированном виде — это неверно.
приходитНе игнориуются, если поля в индексе в правильном порядке для конкретного запроса.ься выбирать диапазоны, а в этом случае составные индексы игнорируются MySQL, т.е. происходит FullScan
Как минимум, см. http://dev.mysql.com/doc/refman/5.7/en/index-merge-optimization.html
Не игнориуются, если поля в индексе в правильном порядке для конкретного запроса.
Завтра постараюсь более подробно предоставить EXPLAIN запросов, которыми тестировал базу.И укажите, пожалуйста, кардинальность полей и диапазоны значений.


SELECT * FROM CDR WHERE src=*****AND calldate>'2016-06-21' AND calldate<'2016-06-22';
/* Affected rows: 0 Найденные строки: 4 Предупреждения: 0 Длительность 1 query: 6,068 sec. */
Я, конечно, знал что в MySQL с оптимизацией запросов все плохо — но не настолько же!
Этот запрос должен хорошо ложиться на индекс (src, calldate). А вот индекс (calldate, src) особо помогать и не должен.
А вот индекс (calldate, src) особо помогать и не должен.Да, там по key_len видно, что использовано только первое поле из индекса.





Мне кажется, если бы у вас calldate был в формате unixtime, работало бы шустро без дополнительного поля date.
Ещё вариант, вместо одного datetime сделать два поля: date и time.
если бы у вас calldate был в формате unixtime
Ещё вариант, вместо одного datetime сделать два поля: date и time.
Duration и billsec я бы не занулял. толку от знания про звонок, если по факту у него длительность 3 секунды до автоответчика на той стороне. или же наоборот, полтора часа разговора на нерабочие темы, например.
CDR. Сохранить и приумножить