... все еще не получаю результатов, пытаясь оптимизировать таблицу mysql innodb для быстрого подсчета - PullRequest
1 голос
/ 06 января 2012

Я написал этот вопрос здесь некоторое время назад. Я опробовал предложения и пришел к выводу, что я должен делать что-то в корне неправильно. Что я в основном хочу сделать, это:

У меня есть таблица, содержащая 83 млн. время / цена пары. В качестве индекса im используется метка времени Unix с точностью до миллисекунды, цена колеблется между 1.18775 и 1.60400 (десятичная с точностью 5). У меня есть клиент, которому нужно получить плотность цен за заданный интервал времени, то есть я хочу взять указанный интервал времени и посчитать, сколько раз все разные цены появляются в этом интервале. Как бы вы, ребята, сделали это? Как бы вы разработали / проиндексировали таблицу? Сейчас я создаю временную подтаблицу, содержащую только данные за данный интервал, а затем делаю подсчет цен. Есть лучший способ сделать это? Мои общие настройки БД уже настроены и довольно производительны. Спасибо за любые подсказки! Я предоставлю любую дополнительную информацию, необходимую как можно быстрее!

1 Ответ

0 голосов
/ 06 января 2012

Учитывая, что у вас большой объем данных, и он быстро растет v, я был бы склонен добавить вторую таблицу:

price (primary key)
time( some block - also part of PK )
count

Выполнить «вставку при обновлении счетчика дубликатов ключа ++»вещь.Сгруппируйте поле времени по некоторому заданному интервалу (зависит от того, какие запросы вы получаете .. мс / сек / час / что угодно).Таким образом, вы:

 don't have to mess with temp tables - with a table of this size it will write to disk - slow even with SSD
 don't have to touch the initial table every time you want to do your query - might run into locking issues

Вам придется немного отредактировать свои данные, но детализация может быть предопределена, чтобы вызвать как можно меньше проблем.

...