Update table Data without using while loop in sql server 2005Улучшенная производительность для вычисления текущего итога операции в SQL Server 2005
я задал этот вопрос и детали ....
в SQL у меня есть таблица данных, как показано ниже
id type amount
1 type1 2000
2 type1 1000
3 type2 500
4 type3 3000
5 type1 2000
6 type2 500
7 type3 5000
8 type1 1000
и Я хочу получить данные в выписке, как показано ниже
id type amount current
1 type1 2000 2000
2 type1 1000 1000
3 type2 500 500
4 type3 3000 3000
5 type1 2000 3000
6 type2 -500 0
7 type3 5000 2000
8 type1 -1000 4000
a й так далее , что означает, что каждый тип должен иметь свою текущую общую сумму в зависимости от суммы типа и его потребности быть не имеет в то время как петли, так как это занимает много времени, чтобы выполнить
for eg:
in type 1
ID Amount current
1 2000-add 2000
2 1000-sub 1000
3 2000-add 3000
4 1000-add 4000
и ответ,
SELECT id,
type,
amount,
(SELECT sum(amount)
FROM mytable t1
WHERE t1.type = t2.type
AND t1.id <= t2.id) currenttotal
FROM mytable t2
Теперь проблема в том, предположим, вышеприведенный пример есть 8000 (это увеличит) записи данных, как
id type amount
1 type1 2000
2 type1 1000
3 type2 500
4 type3 3000
5 type1 2000
6 type2 500
7 type3 5000
8 type1 1000
и его взять 00:00:02
время для выполнения оператора select, которое я написал на основе ответа (у вас есть 2 ответа и оба имеют одинаковое время выполнения) для вышеуказанного вопроса. Как уменьшить это время выполнения?
* Как уменьшить это время выполнения? * У вас есть индексы для поддержки запроса? Я предполагаю, что вы хотя бы посмотрели на план исполнения. –
Downvoted, пожалуйста, добавьте более подробную информацию. – Namphibian
Соответствующий индекс для этого запроса: 'type, id INCLUDE (amount)', хотя если у вас много строк на производительность 'type', все равно будет плохо. –