Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Индексирование  [new]
Aleks_Aleks
Member

Откуда:
Сообщений: 319
В таблицу были внесены данные (в ручную), затем удалены. Далее данные в эту таблицу вносились автоматически,
после добавления некоторых записей, появилось свободное место в столбце с идентификаторами (пропущенные значения идентификаторов).
Вопросы:
1. почему появилось свободное место ведь, данные внесенные в ручную были удалены до того как вносились данные автоматически ?
2. возможно ли средствами Microsoft SQL Server сделать переиндексацию таблицы, и как ?
14 апр 14, 11:18    [15877955]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Перестроением индексов.
REBUILD INDEX
14 апр 14, 11:24    [15877986]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Glory
Member

Откуда:
Сообщений: 104751
Aleks_Aleks
Вопросы:
1. почему появилось свободное место ведь, данные внесенные в ручную были удалены до того как вносились данные автоматически ?

Потому что вы занесли такие данные

Aleks_Aleks
2. возможно ли средствами Microsoft SQL Server сделать переиндексацию таблицы, и как ?

Переиндексация не меняет значений в полях таблицы
14 апр 14, 11:26    [15877996]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Aleks_Aleks,

"... появилось свободное место в столбце с идентификаторами (пропущенные значения идентификаторов)." если у вас для столбца установлено свойство IDENTITY, то для его сброса можно использовать TRUNCATE TABLE (данные в таблице пропадут).
1. IDENTITY не гарантирует непрерывности - при удалении строк появится, как вы говорите, свободное место.
2. Переиндексация вам не поможет.
14 апр 14, 12:13    [15878278]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
NickAlex66
если у вас для столбца установлено свойство IDENTITY, то для его сброса можно использовать TRUNCATE TABLE (данные в таблице пропадут).
Надёжнее DROP DATABASE (данные, наверно, тоже пропадут).

DBCC CHECKIDENT

Однако,
NickAlex66
2. Переиндексация вам не поможет.
- это правда!

И непрерывность IDENTITY - бессмысленна.
14 апр 14, 12:38    [15878486]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
автор
1. почему появилось свободное место

Этим гарантируется непротиворечивость данных, система ведь транзакционно-многопользовательская.
14 апр 14, 12:39    [15878496]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
iap,

DBCC CHECKIDENT - ваш вариант более гуманен :)
14 апр 14, 13:13    [15878803]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Aleks_Aleks
Member

Откуда:
Сообщений: 319
Может я не совсем правильно объяснил...

Ниже представлен рисунок, на котором столбец из таблицы.

Его свойства: (PK, int, not null)

после удаления некоторых записей, появился разрыв в значениях, между номерами 31 и 98...

как сделать что юы разрыва не было, а было по порядку 31 32 33 34 .... ?

К сообщению приложен файл. Размер - 8Kb
14 апр 14, 14:22    [15879331]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Glory
Member

Откуда:
Сообщений: 104751
Aleks_Aleks
как сделать что юы разрыва не было, а было по порядку 31 32 33 34 .... ?

Поменять значения в нужных записях.
Командой UPDATE.
14 апр 14, 14:29    [15879383]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Гость888
Guest
Aleks_Aleks,
"после удаления некоторых записей, появился разрыв в значениях, между номерами 31 и 98...
как сделать что юы разрыва не было, а было по порядку 31 32 33 34 .... ? "

Зачем вам по-порядку? У вас же ид строки однозначно её идентифицирует? У вас же , наверняка, на эти записи что-то ссылается?
14 апр 14, 14:49    [15879536]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
identity
Guest
Aleks_Aleks
Может я не совсем правильно объяснил...

Ниже представлен рисунок, на котором столбец из таблицы.

Его свойства: (PK, int, not null)

после удаления некоторых записей, появился разрыв в значениях, между номерами 31 и 98...

как сделать что юы разрыва не было, а было по порядку 31 32 33 34 .... ?

если это разовая операция, то, как уже сказали, update.
если вам нужно постоянно поддерживать непрерывность нумерации, то identity плохой выбор
14 апр 14, 14:51    [15879552]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Aleks_Aleks
Member

Откуда:
Сообщений: 319
Команда UPDATE не проходит

Сообщение: Cannot update identity column 'Id'.
14 апр 14, 16:00    [15880150]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Glory
Member

Откуда:
Сообщений: 104751
Aleks_Aleks
Команда UPDATE не проходит

Сообщение: Cannot update identity column 'Id'.

Удалите поле Id.
Потом создайте его заново.
Если больше нечего делать.
14 апр 14, 16:03    [15880177]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Aleks_Aleks,

SET IDENTITY_INSERT в помощь
14 апр 14, 16:08    [15880217]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Glory
Member

Откуда:
Сообщений: 104751
NickAlex66
SET IDENTITY_INSERT в помощь

Это не поможет _изменить_ значения у существующих записей.
14 апр 14, 16:31    [15880414]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Aleks_Aleks
Member

Откуда:
Сообщений: 319
Glory,

Да не то, что бы, нечего делать!

На сколько я знаю это замедляет скорость выполнение запросов.
14 апр 14, 16:50    [15880524]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Glory
Member

Откуда:
Сообщений: 104751
Aleks_Aleks
На сколько я знаю это замедляет скорость выполнение запросов.

Что ? Пропуски значений в поле замедляют выполнение запросов ???
И давно ?
14 апр 14, 16:51    [15880530]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Glory
NickAlex66
SET IDENTITY_INSERT в помощь

Это не поможет _изменить_ значения у существующих записей.


Изменять и не надо: TC вопрошал по поводу "...появилось свободное место..."
14 апр 14, 16:51    [15880532]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Glory
Member

Откуда:
Сообщений: 104751
NickAlex66
Glory
пропущено...

Это не поможет _изменить_ значения у существующих записей.


Изменять и не надо: TC вопрошал по поводу "...появилось свободное место..."

"после удаления некоторых записей, появился разрыв в значениях, между номерами 31 и 98...
как сделать что юы разрыва не было, а было по порядку 31 32 33 34 .... ?" 15879331
14 апр 14, 16:53    [15880545]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Aleks_Aleks
Member

Откуда:
Сообщений: 319
Гость888
Aleks_Aleks,
"после удаления некоторых записей, появился разрыв в значениях, между номерами 31 и 98...
как сделать что юы разрыва не было, а было по порядку 31 32 33 34 .... ? "

Зачем вам по-порядку? У вас же ид строки однозначно её идентифицирует? У вас же , наверняка, на эти записи что-то ссылается?



То что серинькое это не ID, это номер строки как результат запроса, ID это белые сторчки.

На ID ни чего не ссылается, это нумерация записей.
14 апр 14, 17:06    [15880627]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Glory
Member

Откуда:
Сообщений: 104751
Aleks_Aleks
То что серинькое это не ID, это номер строки как результат запроса, ID это белые сторчки.

Вы написали "Его свойства: (PK, int, not null)"
Вопрос - зачем нужно, чтобы значения в PK были без пропусков ?
14 апр 14, 17:08    [15880643]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Aleks_Aleks
Member

Откуда:
Сообщений: 319
Glory,

Допустим, что эти пропуски в индентификаторе ни на что не влияют,... теперь я спокоен)

Но есть какой нить простой и доступный способ это исправить ? - так, для общего развития.
14 апр 14, 17:13    [15880669]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Glory
Member

Откуда:
Сообщений: 104751
Aleks_Aleks
Но есть какой нить простой и доступный способ это исправить ? - так, для общего развития.

Удалите поле.
Добавьте поле.
14 апр 14, 17:14    [15880684]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1578
Aleks_Aleks
Glory,

Допустим, что эти пропуски в индентификаторе ни на что не влияют,... теперь я спокоен)

Но есть какой нить простой и доступный способ это исправить ? - так, для общего развития.
Исправить можно что-то поломанное, неправильное. Что неправильного в прерывистых значениях identity поля?
14 апр 14, 17:27    [15880792]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование  [new]
Aleks_Aleks
Member

Откуда:
Сообщений: 319
На этом все.

Всем спасибо за помощь.
14 апр 14, 17:39    [15880886]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить