Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скорость поиска [D7, MSSQL]


VadimSpb ©   (2007-03-06 12:14:00) 

Добрый день!
Перед вводом записи в БД проверяю ее на уникальность. Какой метод будет работать быстрее: Locate или запрос на выборку?


MsGuns   (2007-03-07 20:58:00) [1]

Гадали восемь поросят
С какой приправой их едят ;)


Johnmen   (2007-03-07 20:24:00) [2]


> Ega23 (home)   (07.03.07 11:39) [16]

Он таких букаф не знает, ибо не в курсе основ теории построения баз данных. Что печальною. Но, как обычно...


Ega23 (home)   (2007-03-07 11:39:00) [3]

Ну до 3-й нормальной формы всё равно не дотянул...   :)


VadimSpb   (2007-03-07 11:34:00) [4]

Решил просто.
ALTER TABLE TableName ADD CONSTRAINT UQ_FieldName UNIQUE (FieldName)


Ega23   (2007-03-06 14:25:00) [5]


> Согласен :-)) Так как лучше сделать данное поле?


Данное поле лучше:
1) Убрать ключ с nvarchar
2) Рядом положить ключевое поле int (identity или нет - не принципиально)
3) Поменять nvarchar на varchar
4) Наложить на поле уникальный индекс
5) Всё обернуть хранимой процедурой и все проверки делать уже в ней


VadimSpb   (2007-03-06 14:19:00) [6]


> sniknik ©   (06.03.07 13:59) [8]

Согласен :-)) Так как лучше сделать данное поле?


Ega23   (2007-03-06 14:17:00) [7]


> Не принципиально.
>


Отнюдь.


VadimSpb   (2007-03-06 14:16:00) [8]


> Почему не varchar?

Не принципиально.


Ega23   (2007-03-06 14:10:00) [9]

зачем nvarchar? Почему не varchar? Ты с юникодом работаешь?


VadimSpb   (2007-03-06 14:06:00) [10]


> а инфа о том как ты это делаеш...

Пока сделал выборкой. Поле nvarchar(50). Сервер не позволяет его сделать уникальным.


sniknik   (2007-03-06 13:59:00) [11]

> Речь идет о "Лицевом счете". Он д.б. уникальным и м.б. с буквами.
вообще ожидалось не инфа по тому чтоты делаешь(хотя тоже полезно), а инфа о том какты это делаеш... разница однако.

> Если бы требовались только цифровые значения, можно было использовать ключевое поле.
ты чтото путаешь, ключевое поле с автоинкрементом и ключ с уникальностью.
совершенно неважно есть или нет буквы в значениях поля для назначения его ключем... и тебе не нужен ключ по этому полю чтобы сделать его уникальным (уникальность ключа это всеголишь одно из его свойств, которое есть и отдельно. индекса с уникальностью достаточно)


Ega23   (2007-03-06 13:46:00) [12]


> Речь идет о "Лицевом счете". Он д.б. уникальным и м.б. с
> буквами. Если бы требовались только цифровые значения, можно
> было использовать ключевое поле.


А почему нельзя рядом тупо Identity-поле положить, назначить ключевым его? А на номер счёта - тупо unique-индекс наложить?


Sergey13   (2007-03-06 13:46:00) [13]

> [5] VadimSpb   (06.03.07 13:43)
Как это все друг с другом связано?
В огороде бузина, а в Киеве дядька.


VadimSpb   (2007-03-06 13:43:00) [14]

Речь идет о "Лицевом счете". Он д.б. уникальным и м.б. с буквами. Если бы требовались только цифровые значения, можно было использовать ключевое поле.


sniknik   (2007-03-06 13:09:00) [15]

> Когда проверка идёт в рамках SP? Да ладно...
в процедуре это уже можно говорить о принятии решении о уникальности на сервере.

в вопросе о процедурах ни слова, лиш о запросе. т.е. смею предположить речь шла о такой схеме - клиент делает запрос с условием и анализирует ответ, если выборка чтото вернула значит такие значения есть, посылать повторно то же значение нельзя, если же выборка пустая то выполняется (может предварительно еще и формируется) запрос на вставку...
так в общем, хотя могут быть вариации (счас автор "проснется", скажет).


Ega23   (2007-03-06 12:47:00) [16]


> а решение о уникальности/нет на клиенте с помощью запроса
> может быть "испорчено" вставкой аналогичного значения "в
> момент действий по решению" другим клиентом (ну вот 2 одновременно
> послали запрос на выборку одного и тогоже...))
>


Когда проверка идёт в рамках SP? Да ладно...


sniknik   (2007-03-06 12:43:00) [17]

проверкой на уникальность должен заниматься сервер, при или непосредственно перед вставкой... иначе прога будет лишена "высокого звания многопользовательской..." ;о))

ни один из приведенных способов не отвечает этому требованию (про локейт по локальному рекордсету (который может час назад получен) и говорить нечего, а решение о уникальности/нет на клиенте с помощью запроса может быть "испорчено" вставкой аналогичного значения "в момент действий по решению" другим клиентом (ну вот 2 одновременно послали запрос на выборку одного и тогоже...))


Ega23   (2007-03-06 12:28:00) [18]

Зависит от множества факторов.
Лично я предпочитаю второе.


Наверх

Титульная страница Поиск, карта сайта Написать письмо