Я собираюсь сделать некоторые предположения
- Ваши 100-тысячные строки, добавляемые каждый день, имеют временные метки, которые либо отображаются в режиме реального времени, либо смещены на относительно короткий промежуток времени (максимум часов); ваши 100к строк добавляются либо в течение дня, либо несколькими большими партиями.
- Данные никогда не обновляются
- Вы используете движок InnoDB (Честно говоря, было бы безумно использовать MyISAM для больших таблиц, потому что в случае сбоя перестройка индекса занимает непомерно много времени)
Вы не объяснили, какие отчеты вы пытаетесь сгенерировать, но я предполагаю, что ваша таблица выглядит следующим образом:
CREATE TABLE logdata (
dateandtime some_timestamp_type NOT NULL,
property1 some_type_1 NOT NULL,
property2 some_type_2 NOT NULL,
some_quantity some_numerical_type NOT NULL,
... some other columns not required for reports ...
... some indexes ...
);
И что ваши отчеты выглядят как
SELECT count(*), SUM(some_quantity), property1 FROM logdata WHERE dateandtime BETWEEEN some_time_range GROUP BY property1;
SELECT count(*), SUM(some_quantity), property2 FROM logdata WHERE dateandtime BETWEEEN some_time_range GROUP BY property2;
Теперь, как мы видим, оба этих отчета сканируют большое количество таблицы, потому что вы отчитываетесь по большому количеству строк.
Чем больше временной диапазон, тем медленнее будут отчеты. Более того, если у вас есть много ДРУГИХ столбцов (скажем, некоторых varchars или больших двоичных объектов), о которых вы не заинтересованы в отчете, они также замедляют ваш отчет (поскольку серверу все еще нужно проверять строки).
Вы можете использовать несколько возможных методов для ускорения этого:
- Добавьте индекс покрытия для каждого типа отчета, чтобы поддерживать нужные вам столбцы и опускать столбцы, которые вам не нужны. Это может сильно помочь, но медленные вставки вниз.
- Суммируйте данные в соответствии с измерением (ями), о которых вы хотите сообщить. В этом вымышленном случае все ваши отчеты либо подсчитывают строки, либо SUM () генерируют some_quantity.
- Создание зеркальных таблиц (содержащих те же данные), которые имеют соответствующие первичные ключи / индексы / столбцы для ускорения отчетов.
- Использовать движок колонки (например, Infobright)
Суммирование обычно является привлекательным вариантом, если ваш сценарий использования поддерживает его;
Возможно, вы захотите задать более подробный вопрос с объяснением вашего варианта использования.