Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Опытным монстрам SQL / 25 сообщений из 44, страница 1 из 2
15.11.2002, 11:38:30
    #32068242
aproximate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
Ктонить сталкивался с такой проблемой -
в таблице очень много записей (порядка 300 000 000), есть поле ID(Pk, identity) как быстро найти максимальный Id? Если писать в лоб Select Max(Id) from tabl1 работает достаточно долго - в районе 6 минут. Нужно чтобы хотябы секунд в 30 укладывалось
...
Рейтинг: 0 / 0
15.11.2002, 11:44:03
    #32068245
nandji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
SELECT IDENT_CURRENT('table_name')
...
Рейтинг: 0 / 0
15.11.2002, 11:47:44
    #32068247
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
select ident_current('tablename') работает правильно, если последние ID не удалялись.

select top 1 ID from table order by id desc может попроще будет
...
Рейтинг: 0 / 0
15.11.2002, 11:52:15
    #32068253
aproximate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
select top 1 ID from table order by id desc - пробовал работает еще дольше.... :(
...
Рейтинг: 0 / 0
15.11.2002, 12:00:54
    #32068261
Lexis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
попробуй создать некластерный индекс по тому же полю, а в запросе укажи его хинтом
...
Рейтинг: 0 / 0
15.11.2002, 12:03:01
    #32068262
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
может так получше будет:
select top 1 ID from table option (fast 1) order by id desc
...
Рейтинг: 0 / 0
15.11.2002, 12:04:15
    #32068265
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
2 Lexis: а некластерный индекс размером будет порядка гигабайта. :)
...
Рейтинг: 0 / 0
15.11.2002, 12:06:06
    #32068266
Lexis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
идея использования некластерного индекса в том, что в этом случае считывать SQL будет меньшее количество блоков данных..полагаю
так как кластерный привязан к таблице и храниться собственно в ней
...
Рейтинг: 0 / 0
15.11.2002, 12:16:17
    #32068276
aproximate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
Ускорение при использовании не кластерного индексе приблизительно в 2 раза... уже лучше - но все таки уже лучше

а вот select top 1 ID from table option (fast 1) order by id desc... не совсем понял что здесь значит fast 1
...
Рейтинг: 0 / 0
15.11.2002, 12:18:16
    #32068279
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
Тогда еще вариант - PK можно некластерным сделать. Но это все равно лишний гиг размера. :(

fast 1 - это указание оптимизатору выбрать такой план выполнения запроса, который максимально быстро вернет первую строку.
...
Рейтинг: 0 / 0
15.11.2002, 12:21:01
    #32068281
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
зачем нужен fast 1 если и так присутсвует top 1
...
Рейтинг: 0 / 0
15.11.2002, 12:21:11
    #32068282
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
И если уж создан некластерный индекс - то может быть будет быстрее, если сделать его desc (только на 2000).
...
Рейтинг: 0 / 0
15.11.2002, 12:27:17
    #32068288
Lexis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
пусть будет гигабайт, но он же древовидный :)
еще можно положить его в отдельный файл, файл положить на другой диск...
...
Рейтинг: 0 / 0
15.11.2002, 12:32:53
    #32068292
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
Может проще триггера повесить и держать это значение еще где-нибудь? Если уж ident_current совсем не подходит.
...
Рейтинг: 0 / 0
15.11.2002, 12:33:29
    #32068294
Lexis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
2. вариант
сделать триггер на вставку и т.п, который будет постоянно обновлять max(id), хранящееся в другом месте....в какой нить служебный таблице
3. вариант
если Identity, то можно вот:
IDENT_CURRENT('table_name')
...
Рейтинг: 0 / 0
15.11.2002, 12:34:37
    #32068296
aproximate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
По идее размер индекса меня абсолютно не пугает... fast 1 дает такую же скорость что и без него. Всеравно всем спасибо.
...
Рейтинг: 0 / 0
15.11.2002, 12:37:43
    #32068302
aproximate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
а тригера здесь не подходят - данные в онлайне льются очень быстро... порядка 30 000 000 в день.
...
Рейтинг: 0 / 0
15.11.2002, 12:41:18
    #32068310
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
Как льются, по одной записи или пачками?
...
Рейтинг: 0 / 0
15.11.2002, 12:42:33
    #32068312
aproximate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
так и так....
...
Рейтинг: 0 / 0
15.11.2002, 12:45:22
    #32068315
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
Удаляются часто? Пачками или по одной?
...
Рейтинг: 0 / 0
15.11.2002, 12:47:15
    #32068317
aproximate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
удаляются редко... и в основном штучно
...
Рейтинг: 0 / 0
15.11.2002, 13:03:30
    #32068329
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
Ну если так вижу такие варианты:

1) Использовать ident_current, наплевать на возможную ошибку в одну-две записи и молиться.

2) сделать триггер на делете:
if (select max(id) from deleted)=ident_current('tablename')
DBCC CHECKIDENT (tablename,RESEED)
и использовать после этого ident_current наплевав на возможность повторного появления уже однажды удаленных ID.
...
Рейтинг: 0 / 0
15.11.2002, 13:08:29
    #32068333
aproximate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
...
Рейтинг: 0 / 0
15.11.2002, 13:11:45
    #32068334
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
Хотя второй вариант не пройдет - dbcc нверное будет блокировать таблицу на долгое время.
...
Рейтинг: 0 / 0
15.11.2002, 13:43:43
    #32068347
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опытным монстрам SQL
Интересно, где же ответ Glory?

Или он себя не считает опытным монстрам SQL?!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Опытным монстрам SQL / 25 сообщений из 44, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]