Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
16.10.2001, 07:34
|
|||
|---|---|---|---|
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
Есть таблица (ниже скрипт) в которой как мне кажется он мне вовсе не нужен. Количество записей в этой таблице 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 метров и непонятно чем занимается. Подскажите в чем может быть дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.10.2001, 13:06
|
|||
|---|---|---|---|
|
|||
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
Один из возможных вариантов - кеширование данных, автообновление статистики и т.п. Если у Вас память выделяется SQL серверу динамически, можете жёстко зафиксировать её максимальный размер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.10.2001, 14:04
|
|||
|---|---|---|---|
|
|||
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
ну на самом деле если создал такой индекс и тем боле кластерный то этот индекс анологичен pk, а pk нужен для поддерханния ссылочной целосности и соответствеено если нет fk других тавлиц на эту таблицу то можно обойтись и без pk (если информация статична -не добавляются новые записи или очень мало то лучше создать pk на основе этого индекса(4 поля)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.10.2001, 16:46
|
|||
|---|---|---|---|
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
Насколько я понял табл. служит для регистрации случаев, я бы посоветовал иметь поле типа "ID" и по нему сделать первичный ключ, а по остальным полям - вторичные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.10.2001, 03:25
|
|||
|---|---|---|---|
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
2 Alex Не путайте божий дар с ... сами знаете чем. Первичный ключ и индекс совершенно разные вещи, то что индекс по первичному ключу (а он на первичный ключ строится автоматом) не используется в запросах не о чем не говорит. У Вас что, одна таблица во всей базе? Или таблицы не связаны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.10.2001, 05:29
|
|||
|---|---|---|---|
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
Мне не хотелось бы задавать использование памяти жестко. Так как ее и так не хватает на таких объемах данных. У меня нет fk других таблиц на эту таблицу. Первичный ключ по 4 полям создать нельзя так как он не будет уникальным. И в принципе мне он вообще не нужен отнимает лишь 1 Gb места (таблица 29 млн. записей)я все-таки его ночью добавил (ID-счетчик) думаю может из-за того что я его неделю назад убрал у меня машина непонятно чем иногда занимается. И что же вы думаете опять вот за час работы винт как завелся на 5-8 минут. У меня мало опыта работы с MSSQL 2000 (как впрочем и с 7-м) поэтому cкажите пожалуйста это нормальньно или нет. Просто когда у меня стоял 7-ой ничего подобного не было, правда и объемы не такие были. Genady конечно же в базе не одна таблица таблиц с десяток а остальные справочники и в этой таблице хранятся медуслуги. Задача такова есть Счет выставленный медучреждением. В счете от 1-999 случаев (случай - информация о пролеченном больном фамилия,имя и т.п), затем на каждый случай две таблицы одна с сопутствующими диагнозами, вторая "Медуслуги" - какие медуслуги были оказаны в том или ином случае и в этой таблице к концу года будет примерно 40 млн. записей. Была-бы она не такая большая я бы и не расстраивался особо завел бы его и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.10.2001, 05:53
|
|||
|---|---|---|---|
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
>Была-бы она не такая большая я бы и не расстраивался особо завел бы его и все. Ключ не собачка, его не заводят У ключа (первичного, внешнего etc.) есть четкое назначение и смысл, первичный ключ определяют для идентификации записей, а не для использования как индекса. Tuning Wizard показал, что он используется 0% вполне обоснованно, ключ то суррогатный и в Вашем запросе не используется в выражении where. Могу поспорить, что если Вы оставите индекс по полям КодСлучая,КодМедуслуги,Количество,Стоимость и при этом оставите первичный ключ время выполнения запроса все равно останется лучшим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.10.2001, 09:06
|
|||
|---|---|---|---|
|
|||
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
на самом деле проблема с тормознотустью может быть как раз с индексом (особенно если записи добавляются часто) лучьше обратись к литературе sql (pk и индексы ) а то тема очень обширная может надо обновлять статистики чаше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.10.2001, 10:01
|
|||
|---|---|---|---|
|
|||
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
Не путайте божий дар с ... сами знаете чем. Первичный ключ и индекс совершенно разные вещи, то что индекс по первичному ключу (а он на первичный ключ строится автоматом) не используется в запросах не о чем не говорит. У Вас что, одна таблица во всей базе? Или таблицы не связаны? --------------------------------------------------------- Обратите внимание - не в запросах, а в ЗАПРОСЕ. Т.е. человек написал запрос, в котором какой-то индекс не использовался, и удалил этот индекс. Завтра напишет другой запрос - и удалит еще чего-нибудь. Primary Key в таблице нужен - например, невозможно реплицировать таблицу без PK, да и вообще должна быть возможность как-то сослаться на конкретную запись в таблице? Ну и про ссылочную целостность тут уже сказали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.10.2001, 11:22
|
|||
|---|---|---|---|
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
Т.е. человек написал запрос, в котором какой-то индекс не использовался, и удалил этот индекс. Завтра напишет другой запрос - и удалит еще чего-нибудь. Primary Key в таблице нужен - например, невозможно реплицировать таблицу без PK, да и вообще должна быть возможность как-то сослаться на конкретную запись в таблице? Ну и про ссылочную целостность тут уже сказали... Я поэтому и спрашиваю нужен ли он первичный ключ ведь занимает места до ..я 1.7Gb, реплицировать мне ничего не надо и ссылаться на конкретную запись тоже не надо нужно лишь ссылаться на группу записей относящихся к конкретному случаю (по полю КодСлучая), удалять тоже ничего не надо записи сами каскадно удалятся при удалении некоторого Случая редактирование конкретной записи тоже не нужно нужна пока что лишь статистика по этим данным (это пока, неизвестно что через месяц может понадобиться). Меня интересует вопрос связано ли удаление первичного ключа с временами 5-10 минутными жжужаними винта возникающими примерно через час,два. А то после того как я удалил его это и началось. Я никак не пойму чем SQL Server занимается гоняя винт когда его не просят, ведь до этого не было. Может он статистики пересчитывает, но какого черта их пересчитывать как в базу пока уже неделю ничего недобавляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.10.2001, 12:00
|
|||
|---|---|---|---|
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
>с временами 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.10.2001, 10:34
|
|||
|---|---|---|---|
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
Спасибо Glory действительно опция Auto Shrink установлена была. Теперь может перестанет жужать. С этим я согласен что добавление поля ID не сильно увеличит размер базы. Но я говорю про место занимаемое первичным ключом а не полем. Может я не прав что 1.7 Gb, но помоему так оно и есть так как Index Tuning Vizard показывает о использовании в % некоторого ключа в запросе и о его размере. Так вот там указан размер 1725480 Кб. Может я не правильно чего понял? Но размер базы примерно так и вырос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.10.2001, 14:04
|
|||
|---|---|---|---|
|
|||
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
Замечание по поводу занимаемого места первичным ключом. Когда для таблицы создаётся некластерный индекс (по полям КодСлучая,КодМедуслуги,Количество,Стоимость) то на нижнем уровне B-дерева размещаются указатели двух видов: - в случае отсутствия кластерного ключа указатель строится из file ID, page number, and number of the row on the page. - в случае наличия кластерного ключа указатель - значения ключа. Я считаю, что при создании некластерных индексов, предпочтительнее наличие первичного кластерного ключа с минимально возможным размером значений, так как в этом случае индексы будут компактнее. Попробуйте добавить поле счётчика с типом int, создайте для него PK (clustered) и сравните занимаемый объём. Возможно, Вы будете удивлены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.10.2001, 08:12
|
|||
|---|---|---|---|
|
|||
Вопорос обязательно ли нужен в таблице первичный ключ? |
|||
|
#18+
Полностью согласен с предыдущим оратором (Владимир Смирнов). К этому я бы сделал еще одно добавление: убрал бы из композитного индекса поля [Количество] и [Стоимость]. Целесообразность такого рода полей в индексе крайне сомнительна, а размер индекса раздувают несоизмеримо с возможной пользой. Зато добавляют тормоза при обновлении статистики. ITW не знает логическую модель, поэтому порекомендовал эти поля, просто увидев их в условиях выборки. Могу поспорить, что убрав эти поля из индекса, производительность выборки не увеличится (в практическом значении). А все остальное только полегчает от этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&mobile=1&tid=1825251]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 365ms |

| 0 / 0 |
