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

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

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

fast 1 - это указание оптимизатору выбрать такой план выполнения запроса, который максимально быстро вернет первую строку.
...
Рейтинг: 0 / 0
Опытным монстрам SQL
    #32068281
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем нужен fast 1 если и так присутсвует top 1
...
Рейтинг: 0 / 0
Опытным монстрам SQL
    #32068282
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И если уж создан некластерный индекс - то может быть будет быстрее, если сделать его desc (только на 2000).
...
Рейтинг: 0 / 0
Опытным монстрам SQL
    #32068288
Фотография Lexis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пусть будет гигабайт, но он же древовидный :)
еще можно положить его в отдельный файл, файл положить на другой диск...
...
Рейтинг: 0 / 0
Опытным монстрам SQL
    #32068292
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может проще триггера повесить и держать это значение еще где-нибудь? Если уж ident_current совсем не подходит.
...
Рейтинг: 0 / 0
Опытным монстрам SQL
    #32068294
Фотография Lexis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2. вариант
сделать триггер на вставку и т.п, который будет постоянно обновлять max(id), хранящееся в другом месте....в какой нить служебный таблице
3. вариант
если Identity, то можно вот:
IDENT_CURRENT('table_name')
...
Рейтинг: 0 / 0
Опытным монстрам SQL
    #32068296
aproximate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По идее размер индекса меня абсолютно не пугает... fast 1 дает такую же скорость что и без него. Всеравно всем спасибо.
...
Рейтинг: 0 / 0
Опытным монстрам SQL
    #32068302
aproximate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а тригера здесь не подходят - данные в онлайне льются очень быстро... порядка 30 000 000 в день.
...
Рейтинг: 0 / 0
Опытным монстрам SQL
    #32068310
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как льются, по одной записи или пачками?
...
Рейтинг: 0 / 0
Опытным монстрам SQL
    #32068312
aproximate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так и так....
...
Рейтинг: 0 / 0
Опытным монстрам SQL
    #32068315
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удаляются часто? Пачками или по одной?
...
Рейтинг: 0 / 0
Опытным монстрам SQL
    #32068317
aproximate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
удаляются редко... и в основном штучно
...
Рейтинг: 0 / 0
Опытным монстрам SQL
    #32068329
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если так вижу такие варианты:

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

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

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


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