|
|
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите, пожалуйста, как реализовать такой запрос. Структура таблицы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: sql 1. 2. 3. 4. 5. 6. ENGINE=MyISAM; Мне нужно, чтобы для каждого пользователя в таблице было не больше 100 записей. Соответственно, если их больше, более ранние нужно удалить. Вот такой запрос как-бы работает Код: sql 1. 2. но я не могу повторять его для каждого USERNAME, т.к их несколько тысяч К сожалению, все что мне удалось нагуглить, это тоже только только примеры такого удаления для одного уникального ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 10:23:53 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
nk32, а в чем проблема несколько тысяч раз запрос выполнить для каждого юзера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 11:22:06 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
Наверняка можно. Но это не разовая, а рутинная операция, мне бы не хотелось гонять 10k запросов на удаление лишний раз. Гораздо лучше, если в одном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 11:42:11 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
сделай хранимку и в ней через курсор прогони для всех юзеров будет один запрос на сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 11:55:52 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
... хотя вот насчет курсора нужно подумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 11:55:58 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
nk32Наверняка можно. Но это не разовая, а рутинная операция, мне бы не хотелось гонять 10k запросов на удаление лишний раз. Гораздо лучше, если в одном.Надо сделать её один раз. А затем с технологии добавления записей перейти на технологию обновления самой старой записи. И их ВСЕГДА m,eltn оставаться ровно сколько было для каждого юзера. Если же их менее ста (или для новых юзеров) - просто добавить фэйк-записей до сотни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 13:54:59 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
Akina, не получится. Дело в том, что я дал сферический пример, чтобы не грузить общественность мелкими подробностями. В реальности, у меня есть 10k уникальных сессий, которые висят на железе, которое не умеет вести лог. Чтобы приделать ему эту функцию, раз в 10 минут эти сессии сливаются оттуда telnet-скриптом и запихиваются в базу. К сожалению, у меня нет отдельного триггера на каждое событие. Насчет курсора: ~0,5 сек. на одну итерацию по таблице в 30 раз меньше проектной. Не комильфо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 14:14:13 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
nk32 сессии сливаются оттуда telnet-скриптом и запихиваются в базу.И что? или у тебя идёт тупая потоковая вставка без даже твёрдой копии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 14:53:18 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 17:06:46 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
То есть, собственно, (уникальный?) индекс (USERNAME,DATETIME) и Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 18:49:58 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, спасибо, но я понял, что в моей ситуации такой подход не поможет. Вот это на тестовой таблице при любом join'e на саму себя... Код: plaintext 1. 2. 3. 4. 5. 6. По времени - курсор быстрее. Буду делать циклический лог, как предложил Akina. авторИ что? или у тебя идёт тупая потоковая вставка без даже твёрдой копии? Да. А зачем мне лишний код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 20:26:31 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
nk32, 7489069 переменные -- фактически аналог курсора. Надо будет два прохода -- один для выставления флага на удаление и второй -- само удаление. Можно в едином селекте но все равно два прохода. что-то типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 22:00:48 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
nk32Cygapb-007, спасибо, но я понял, что в моей ситуации такой подход не поможет. Вот это на тестовой таблице при любом join'e на саму себя... Код: plaintext 1. 2. 3. 4. 5. 6. По времени - курсор быстрее.У меня получилось несколько по-другому в http://sqlfiddle.com/#!2/f107c/3 : для Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. План выглядит так:IDSELECT_TYPETABLETYPEPOSSIBLE_KEYSKEYKEY_LENREFROWSFILTEREDEXTRA1PRIMARYALL381001PRIMARYtrefname_datename_date312d.USERNAME;d.DATETIME1100Using where; Using index2DERIVEDdindexname_date3128149100Using where; Using index3DEPENDENT SUBQUERYcrefname_datename_date303db_2_f107c.d.USERNAME74100Using where; Using index ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 08:26:09 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, спасибо огромное! Я действительно снес индексы, так как во время экспериментов с таблицей они мне тормозили удаление записей. С индексом по имени и дате на запрос уходит ~ 5 сек по таблице из 100k записей. Супер! Еще раз спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 14:15:49 |
|
||
|
Удалить все кроме последних N строк
|
|||
|---|---|---|---|
|
#18+
nk32Cygapb-007, спасибо огромное! Я действительно снес индексы, так как во время экспериментов с таблицей они мне тормозили удаление записей. С индексом по имени и дате на запрос уходит ~ 5 сек по таблице из 100k записей. Супер! Еще раз спасибо. если сможете и памяти хватит, попробуйте на переменных, раз в 5-10 быстрее получится... наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 01:19:47 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=194&tid=1835483]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 316ms |

| 0 / 0 |
