|
Можно ли переписать запрос без курсора?
|
|||
---|---|---|---|
#18+
Есть вот такая таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
В ней около 3 миллионов записей. В нее добавили столбец [SetId] [bigint] NULL. Необходимо заполнить этот столбец (SetId) числами от 1 до n, где n - количество пользователей. Если есть записи с одинаковым, то для этих записей SetId - одинаковый. Написал такой запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Но он на 3 миллионах записей он будет работать ну ооочень долго. Можно ли его переписать без курсора? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2013, 17:51 |
|
Можно ли переписать запрос без курсора?
|
|||
---|---|---|---|
#18+
Veligord, а в каком порядке должны обрабатываться данные? в курсоре почему-то не видно ORDER BY ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2013, 18:07 |
|
Можно ли переписать запрос без курсора?
|
|||
---|---|---|---|
#18+
немного сумбурно выглядит... или я не понял... что вы здесь подсчитываете? if @uId != @userId set @setId = @setId + 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2013, 18:09 |
|
Можно ли переписать запрос без курсора?
|
|||
---|---|---|---|
#18+
VeligordМожно ли его переписать без курсора? Ну... изучите DENSE_RANK() что ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2013, 18:19 |
|
Можно ли переписать запрос без курсора?
|
|||
---|---|---|---|
#18+
НО я бы сделал тупо и прямолинейно Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2013, 18:26 |
|
Можно ли переписать запрос без курсора?
|
|||
---|---|---|---|
#18+
Shakil, Order by ID asc Winnipuh, if @uId != @userId set @setId = @setId + 1 это проверка - если id пользователя изменилось, то SetId нужно увеличить на 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2013, 10:17 |
|
Можно ли переписать запрос без курсора?
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2013, 10:36 |
|
Можно ли переписать запрос без курсора?
|
|||
---|---|---|---|
#18+
Ivan Durak, Спасибо, но это немного не то, что мне нужно. Этот скрипт заполняет SetId количеством вхождений пользователя в таблице. А мне нужно, чтобы было просто перечисление от 1 до n. Но, чтобы для одного пользователя SetId был одинаковый. Да, к тому же у меня этот скрипт почему-то заполняет SetId только единиицами. Хотя многие пользователи повторяются десятки и сотни раз. Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2013, 14:06 |
|
Можно ли переписать запрос без курсора?
|
|||
---|---|---|---|
#18+
Veligord, а если записи с одинаковым UserId идут не подряд (order by id), то у них должен быть одинаковый setId или разный? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2013, 14:18 |
|
Можно ли переписать запрос без курсора?
|
|||
---|---|---|---|
#18+
Одинаковый ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2013, 14:47 |
|
Можно ли переписать запрос без курсора?
|
|||
---|---|---|---|
#18+
Всем спасибо, сделал вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2013, 15:03 |
|
Можно ли переписать запрос без курсора?
|
|||
---|---|---|---|
#18+
VeligordВсем спасибо, сделал вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Этот запрос можно написать намного короче: Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2013, 15:27 |
|
|
start [/forum/topic.php?fid=46&gotonew=1&tid=1705654]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
69ms |
get topic data: |
30ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 220ms |
0 / 0 |