powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопорос обязательно ли нужен в таблице первичный ключ?
15 сообщений из 15, страница 1 из 1
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015390
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица (ниже скрипт) в которой как мне кажется он мне вовсе не нужен. Количество записей в этой таблице 29 млн. На 1 случай приходится в среднем 8 записей.

CREATE TABLE [dbo].[Медуслуги] (
[КодСлучая] [int] NOT NULL ,
[КодМедуслуги] [int] NOT NULL ,
[Количество] [real] NULL ,
[Стоимость] [money] NULL
) ON [PRIMARY]

Так вот раньше у меня в ней был и первичный ключ ID (счетчик) и индекс по полю КодСлучая.
Когда я писал один запрос в Query Anlizer запустил Index Tuning Vizard и по нему я окончательно решил что первичный ключ не нужен (показывал что используется на 0%) и посоветовал вместо индекса по полю КодСлучая сделать индекс по полям КодСлучая,КодМедуслуги,Количество,Стоимость ну я так и сделал удалил первичный ключ и создал индекс по 4 полям как он и рекомендовал. В результате запрос стал быстрее выполняться и я на этом успокоился. Но вот такой вопрос что-то у меня машина после этого стала иногда так притормаживать иногда вообще вообще как будто виснет 1-2 минуты вообще практически не реагирует. Смотрю процесс sqlserv оттяпал себе 90 метров и непонятно чем занимается. Подскажите в чем может быть дело.
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015416
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один из возможных вариантов - кеширование данных, автообновление статистики и т.п. Если у Вас память выделяется SQL серверу динамически, можете жёстко зафиксировать её максимальный размер.
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015428
Daymon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну на самом деле если создал такой индекс и тем боле кластерный то этот индекс анологичен pk,
а pk нужен для поддерханния ссылочной целосности и соответствеено если нет fk других тавлиц на эту таблицу то можно обойтись и без pk (если информация статична -не добавляются новые записи или очень мало то лучше создать pk на основе этого индекса(4 поля))
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015439
Максим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял табл. служит для регистрации случаев, я бы посоветовал иметь поле типа "ID" и по нему сделать первичный ключ, а по остальным полям - вторичные.
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015449
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Alex

Не путайте божий дар с ... сами знаете чем.
Первичный ключ и индекс совершенно разные вещи, то что индекс по первичному ключу (а он на первичный ключ строится автоматом) не используется в запросах не о чем не говорит. У Вас что, одна таблица во всей базе? Или таблицы не связаны?
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015451
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне не хотелось бы задавать использование памяти жестко. Так как ее и так не хватает на таких объемах данных. У меня нет fk других таблиц на эту таблицу. Первичный ключ по 4 полям создать нельзя так как он не будет уникальным. И в принципе мне он вообще не нужен отнимает лишь 1 Gb места (таблица 29 млн. записей)я все-таки его ночью добавил (ID-счетчик) думаю может из-за того что я его неделю назад убрал у меня машина непонятно чем иногда занимается. И что же вы думаете опять вот за час работы винт как завелся на 5-8 минут. У меня мало опыта работы с MSSQL 2000 (как впрочем и с 7-м) поэтому cкажите пожалуйста это нормальньно или нет. Просто когда у меня стоял 7-ой ничего подобного не было, правда и объемы не такие были.
Genady конечно же в базе не одна таблица таблиц с десяток а остальные справочники и в этой таблице хранятся медуслуги. Задача такова есть Счет выставленный медучреждением. В счете от 1-999 случаев (случай - информация о пролеченном больном фамилия,имя и т.п), затем на каждый случай две таблицы одна с сопутствующими диагнозами, вторая "Медуслуги" - какие медуслуги были оказаны в том или ином случае и в этой таблице к концу года будет примерно 40 млн. записей.
Была-бы она не такая большая я бы и не расстраивался особо завел бы его и все.
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015452
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Была-бы она не такая большая я бы и не расстраивался особо завел бы его и все.

Ключ не собачка, его не заводят

У ключа (первичного, внешнего etc.) есть четкое назначение и смысл, первичный ключ определяют для идентификации записей, а не для использования как индекса. Tuning Wizard показал, что он используется 0% вполне обоснованно, ключ то суррогатный и в Вашем запросе не используется в выражении where. Могу поспорить, что если Вы оставите индекс по полям КодСлучая,КодМедуслуги,Количество,Стоимость и при этом оставите первичный ключ время выполнения запроса все равно останется лучшим.
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015476
Daymon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на самом деле проблема с тормознотустью может быть как раз с индексом
(особенно если записи добавляются часто)
лучьше обратись к литературе sql (pk и индексы ) а то тема очень обширная
может надо обновлять статистики чаше
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015482
Alexander Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не путайте божий дар с ... сами знаете чем.
Первичный ключ и индекс совершенно разные вещи, то что индекс по первичному ключу (а он на первичный ключ строится автоматом) не используется в запросах не о чем не говорит. У Вас что, одна таблица во всей базе? Или таблицы не связаны?
---------------------------------------------------------

Обратите внимание - не в запросах, а в ЗАПРОСЕ.

Т.е. человек написал запрос, в котором какой-то индекс не использовался, и удалил этот индекс.
Завтра напишет другой запрос - и удалит еще чего-нибудь.
Primary Key в таблице нужен - например, невозможно реплицировать таблицу без PK, да и вообще должна
быть возможность как-то сослаться на конкретную запись в таблице? Ну и про ссылочную целостность тут уже сказали...
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015494
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. человек написал запрос, в котором какой-то индекс не использовался, и удалил этот индекс.
Завтра напишет другой запрос - и удалит еще чего-нибудь.
Primary Key в таблице нужен - например, невозможно реплицировать таблицу без PK, да и вообще должна
быть возможность как-то сослаться на конкретную запись в таблице? Ну и про ссылочную целостность тут уже сказали...

Я поэтому и спрашиваю нужен ли он первичный ключ ведь занимает места до ..я 1.7Gb, реплицировать мне ничего не надо и ссылаться на конкретную запись тоже не надо нужно лишь ссылаться на группу записей относящихся к конкретному случаю (по полю КодСлучая), удалять тоже ничего не надо записи сами каскадно удалятся при удалении некоторого Случая редактирование конкретной записи тоже не нужно нужна пока что лишь статистика по этим данным (это пока, неизвестно что через месяц может понадобиться). Меня интересует вопрос связано ли удаление первичного ключа с временами 5-10 минутными жжужаними винта возникающими примерно через час,два. А то после того как я удалил его это и началось. Я никак не пойму чем SQL Server занимается гоняя винт когда его не просят, ведь до этого не было. Может он статистики пересчитывает, но какого черта их пересчитывать как в базу пока уже неделю ничего недобавляется.
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015498
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>с временами 5-10 минутными жжужаними винта возникающими примерно через час,два.

А у вас случайно, для данной базы(не таблицы) не установлена опция Auto Shrink? У меня в этом случае при размере базы в 30 Gb "зависание" длилось 15-20 минут

>он первичный ключ ведь занимает места до ..я 1.7Gb,
Мне кажется вы путаете логическое понятие "первичный ключ" с действиями, которые производит SQL сервер при установке опции primary key для какого-то поля(ей) в таблице - в этом случае строиться еще и индекс по этому полю(полям), который тоже требует места в базе

Если у вас "ID (счетчик)" (identity int?) и 29 млн записей, то получиться
4 * 29 000 000 = 116 000 000 bytes = ~113 281 Kb =~ 111 Mb, даже с учетом реального размещения данных на диске все равно далековато до 1,7 Gb.
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015549
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Glory действительно опция Auto Shrink установлена была. Теперь может перестанет жужать.
С этим я согласен что добавление поля ID не сильно увеличит размер базы. Но я говорю про место занимаемое первичным ключом а не полем. Может я не прав что 1.7 Gb, но помоему так оно и есть так как Index Tuning Vizard показывает о использовании в % некоторого ключа в запросе и о его размере. Так вот там указан размер 1725480 Кб. Может я не правильно чего понял? Но размер базы примерно так и вырос.
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015584
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замечание по поводу занимаемого места первичным ключом.
Когда для таблицы создаётся некластерный индекс (по полям КодСлучая,КодМедуслуги,Количество,Стоимость) то на нижнем уровне B-дерева размещаются указатели двух видов:
- в случае отсутствия кластерного ключа указатель строится из file ID, page number, and number of the row on the page.
- в случае наличия кластерного ключа указатель - значения ключа.
Я считаю, что при создании некластерных индексов, предпочтительнее наличие первичного кластерного ключа с минимально возможным размером значений, так как в этом случае индексы будут компактнее.
Попробуйте добавить поле счётчика с типом int, создайте для него PK (clustered) и сравните занимаемый объём. Возможно, Вы будете удивлены.
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015630
Полностью согласен с предыдущим оратором (Владимир Смирнов). К этому я бы сделал еще одно добавление: убрал бы из композитного индекса поля [Количество] и [Стоимость]. Целесообразность такого рода полей в индексе крайне сомнительна, а размер индекса раздувают несоизмеримо с возможной пользой. Зато добавляют тормоза при обновлении статистики. ITW не знает логическую модель, поэтому порекомендовал эти поля, просто увидев их в условиях выборки. Могу поспорить, что убрав эти поля из индекса, производительность выборки не увеличится (в практическом значении). А все остальное только полегчает от этого.
...
Рейтинг: 0 / 0
Вопорос обязательно ли нужен в таблице первичный ключ?
    #32015726
Я выиграл спор?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопорос обязательно ли нужен в таблице первичный ключ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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