Мы разрабатываем приложение с одной функцией управления платежами для людей. Платеж будет записан в строке в таблице, со следующими полями:Гранулярность строк данных
PersonId (INT)
TransactionDate (DATETIME)
Amount (MONEY)
PaymentTypeId (INT)
...
...
...
Похоже, мы имеем дело с около 8000 людей, которые мы отправляем платежи, и новая транзакция на человека добавляется ежедневно (Around 8 000 вставок в день). Это означает, что через 7 лет (время, необходимое для хранения данных), у нас будет более 20 000 000 строк.
Мы получаем на 10% больше людей в год, поэтому это число немного увеличивается.
Наиболее распространенным запросом является получение СУММЫ (суммы) на человека, где Дата транзакции между датой начала и датой окончания.
SELECT PersonId, SUM(Amount)
FROM Table
WHERE PaymentTypeId = x
AND TransactionDate BETWEEN StartDate AND EndDate
GROUP BY PersonId
Вопрос в том, будет ли это проблемой производительности для SQL Server 2012? Или 20 000 000 строк не так уж плохо?
Я бы предположил, что кластерный индекс на PersonID
? (Чтобы сгруппировать их), но это приведет к очень медленным вставкам/обновлениям?
Индекс на TransactionDate
?
Возможно, это не связано с вопросом, но не является ли тип данных ДЕНЕГ опасным и бесполезным? – kyooryu
Очень возможно ... Я буду использовать лучший тип данных. – Craig
На самом деле, с кластеризованным индексом ** NOT ** обязательно означает медленные вставки - ** совсем наоборот! ** См. Превосходное сообщение в блоге Кимберли Триппа, в котором обсуждается преимущество ** хорошего кластерного индекса] (http: /www.sqlskills.com/blogs/kimberly/the-clustered-index-debate-continues/) - первое, что она делает, это: * Вкладыши быстрее *! –