|
|
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
Как выбрать последние N записей в Interbase? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2003, 15:04 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
Напрямую - никак нельзя, но можно попытаться через ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2003, 15:13 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
Иногда анализ значения праймери кей помогает ( id > max(id)-n ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2003, 15:57 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
2 Vagoo Именно иногда: только тогда, когда выборка из одной таблицы, в выборке присутствует ID, и ID идут по порядку (без дырок - удаленных записей) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2003, 16:01 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
В firebird я делаю так select first N ... order by ... desc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2003, 03:25 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
>В firebird я делаю так select first N ... order by ... desc Это конечно хорошо, а представьте ситуацию, когда в таблице более миллиона записей, тогда выборка типа select first x skip y работает весьма и весьма долго и чем дальше от начала, тем дольше. Собственно вопрос: как можно ускорить данный процесс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2003, 11:56 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
А для каких-же таких целей необходимо выбирать N последних записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2003, 12:04 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
зачем skip если "последних"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2003, 12:07 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
Вот что-то такое похожее на последниее N записей : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... Вот только скорость ... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2003, 12:22 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
Dnico, а как же "first", почему бы им не воспользоваться? с ордер бай деском... ну и индекс должен быть desc тоже, ессно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2003, 12:26 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
fedd Согласен, работает быстрее в два раза ... это я ради интереса попробовал ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2003, 12:43 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
короче, нечего на сервер пенять, коли руки кривы... нормально first/skip работает. и приэтом, это имхо единственный грамотный способ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2003, 13:28 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
>короче, нечего на сервер пенять, коли руки кривы... нормально first/skip работает. и приэтом, это имхо единственный грамотный способ На сервер никто не пеняет и first/skip хорошо работает, просто н-р при страничном отображении данных через first/skip при большом количестве данных чем дальше от начала таблицы, т.е. при росте числа skip процесс выборки становится все медленне и медленнее. Н-р при выборке skip = 500000 first=20 5 полей varchar(100) выборка делается около 7 минут. Сервер FireBird 1.0.2.978 . Машина Celeron 2000/256 RAM. Поэтому я и спросил как можно ускорить данный процесс. Если кто знает, помогите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 16:06 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
наверно никто не знает, и никак нельзя. внутри себя серверу приходится все записи пробегать и скипать. если только ты не придумаешь, как по к-либо индексированному полю отсечь ненужные записи, например если у тебя еретический порядковый номер без дыр в к.-л. поле. однако, Демон сказал "последних". поэтому ему не надо ничего скипать :) Днико: зачем - могу представить: например, на этом сайте если многостраничный топик, чтобы показать вторую страницу, надо поскипать все посты первой страницы. и по данным никак не отсечешь: врядли на sql.ru они сделали поле "порядковыйномерпоставтопикебездыр" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 16:25 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
А вот интересно, есть команда обратная first, т.е. выбрать не первые записи после какой-то записи, а выбрать определенное кол-во записей перед какой-то записью, н-р: id = 500000 и надо выбрать 20 записей, у которых id<500000, т.е. в случае без дыр в id это №499980-500000. А для случая, когда есть дыры в id как раз подобная команда очень нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 16:37 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
select first 20 * from table where id<500000 order by id desc пазор! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 16:40 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
или я чего-то не понял опять... "команда обратная first"... СергейНью, я правильно тебя понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 16:41 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
>select first 20 * from table where id<500000 order by id desc Данная операция выберет записи c id=1-20, а надо id=499980-500000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 16:56 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
видимо я что-то не догоняю........................... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 17:01 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
прошу прощения, DESC не заметил, но это понятно, что выберет по убыванию 20 штук с конца, но при этом сервер сначала перелопатит все записи, т.е. выигрыша по времени опять нет. Вот если указывать граничные id, тог выборка идет за секунду, не важно номер id. Н-р: select * from table where id >= 500000 and id <= 500020 Время выборки 0,0037 мин а вот: SELECT FIRST 20 * FROM TABLE WHERE ID <= 500000 ORDER BY ID DESCENDING время выборки 3,48 мин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 17:14 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
индекс тоже должен быть desc, насколько мне объясняли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 17:15 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
Конечно можно узнать для каждой страницы № граничного id, но это тоже время, поэтому я и интересуюсь, может есть какая-нибудь команда которая сделает это за меня и сделает побыстрее, чем мой алгоритм? т.е. команда выбирающая не следующие записи, а предыдущие записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 17:22 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
А по поводу DESC на индекс я не знаю, но статистику я привел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 17:27 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
А если попробовать не в одном запросе: 1. ХП которая выбирает select first 20 * from table order by id desc 2. собственно сам запрос select * from ХП order by id asc За синтаксис не ручаюсь, но раньше я этим пользовался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 18:15 |
|
||
|
Как выбрать последние N записей в Interbase?
|
|||
|---|---|---|---|
|
#18+
Да и еще: индексы по id должны быть туда и обратно, а то что-то у меня возникли сомнения по поводу обратного индекса, судя по этому запросу: --SELECT FIRST 20 * --FROM TABLE --WHERE ID <= 500000 --ORDER BY ID DESCENDING --время выборки 3,48 мин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 18:25 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32215362&tid=1580202]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
315ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 187ms |
| total: | 567ms |

| 0 / 0 |
