Соптимизировать индекс
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Соптимизировать индекс
Есть таблица на 2 млрд записей, ежедневно пополняется на ~1.5 млн, Там данные по нескольким биржам. Там идут номера сделок (они по порядку) и id биржи,сейчас целостность обеспечивается кластерным индексом market, number
Фактически единственно зачем мне нужен индекс кроме целостности unique nunber - это узнать last number, что бы узнать откуда докачивать при разрыве коннекта.
Сейчас помотрел, там пишут объем индексов ~57 гб, вот я думаю может этот грохнуть, и повесить триггер на insert, который будет проверять в служебной таблице maxnumber, т.е. если в инсерте есть меньше - кидать эксепшин, если больше - обновить табличку. Тем более триггер на insert уже висит, туда только несколько строк добавить.
Как идея? Цель не только освободить место, я подозреваю что эти действия в триггере будут быстрее работы с огромной таблицей индексов.
Может получше решение есть?
Фактически единственно зачем мне нужен индекс кроме целостности unique nunber - это узнать last number, что бы узнать откуда докачивать при разрыве коннекта.
Сейчас помотрел, там пишут объем индексов ~57 гб, вот я думаю может этот грохнуть, и повесить триггер на insert, который будет проверять в служебной таблице maxnumber, т.е. если в инсерте есть меньше - кидать эксепшин, если больше - обновить табличку. Тем более триггер на insert уже висит, туда только несколько строк добавить.
Как идея? Цель не только освободить место, я подозреваю что эти действия в триггере будут быстрее работы с огромной таблицей индексов.
Может получше решение есть?
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Соптимизировать индекс
mssql 2106
Last edited by OtherSide on 17 Jan 2018 11:36, edited 1 time in total.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Re: Соптимизировать индекс
Кластерный индекс - это организация САМИХ данных в нужном порядке. Это nonclustered index некая дополнительная структура в сторонке. Вы уверены что индекс кластерный?
Конечно можно убрать кластерный индекс (это долго кстати - таблица целиком перестаивается) - тупо вставлять в конец heap таблицы немного быстрее. Но это странно - что, в этой таблице вам вообще никакого поиска не надо? совсем совсем?
Конечно можно убрать кластерный индекс (это долго кстати - таблица целиком перестаивается) - тупо вставлять в конец heap таблицы немного быстрее. Но это странно - что, в этой таблице вам вообще никакого поиска не надо? совсем совсем?
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Соптимизировать индекс
Конечно надо, но для этого есть другой индекс.
Индекс проверил - некластерный.
А вот второй - кластерный. В него включен market, stockid, tradedate
По нему есть запросы.
Индекс проверил - некластерный.
А вот второй - кластерный. В него включен market, stockid, tradedate
По нему есть запросы.
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Соптимизировать индекс
-- тупо вставлять в конец heap таблицы
это что?
это что?
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Соптимизировать индекс
59 Гиг индекс
Второй кластерный (ничего не занимает?)
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Соптимизировать индекс
Таблица кстати секционированная (если это что то меняет)
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Re: Соптимизировать индекс
Если таблица heap, то есть нет кластерного индекса, то новые данные физически записываются в конец таблицы. С кластерным и все сложнее
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Соптимизировать индекс
меня больше интересуют хитрости как ускорить триггера. может стоит эту табличку как то пометить что бы она кешировалась лучше. стоит ли вешать на нее индексы(учитывая что там 5 строк) и т.д.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Re: Соптимизировать индекс
Он сам вам кеширует все, не бойтесь.
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Соптимизировать индекс
Так что - будет ли триггер работать быстрее индекса (некластеризованного)?
Вот, написал
Вот, написал
Code: Select all
update maxfulltrades
set maxnumber = (select max(number) from inserted where inserted.Market = maxfulltrades.market)
where market in (select market from inserted group by Market)
-
- Уже с Приветом
- Posts: 1781
- Joined: 11 Jan 2001 10:01
- Location: Томск->Дубровка (ON)
Re: Соптимизировать индекс
Может и поздновато уже, ну да ладно.OtherSide wrote: ↑17 Jan 2018 11:03
Фактически единственно зачем мне нужен индекс кроме целостности unique nunber - это узнать last number, что бы узнать откуда докачивать при разрыве коннекта.
...
Как идея? Цель не только освободить место, я подозреваю что эти действия в триггере будут быстрее работы с огромной таблицей индексов.
Может получше решение есть?
SQL Server Change Tracking - кмк самое то для указанной цели.
На читающей стороне хранить историю чтения.
Каждый раз брать только то, что изменилось с предыдущего раза, не надо заморачиваться с нумерацией или timestamps.
Надо придумать, какие записи читать при самом первом разе, когда ещё нет закладки от прошлого раза.
А потом - просто с закладки последнего успешного чтения.
Читатели получаются независимыми друг от друга.
Зато её так мало надо, всего две капли на стакан...
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Соптимизировать индекс
Спасибо, я на триггер повесил, вроде пока норм работает. Да и по сути эта таблица только как бакап данных работает, запросы редкие, мне индекс только для целостности нужен был