Index On ... Unique и удаленная запись | |
---|---|
Равиль Автор Сообщений: 6549 Откуда: Уфа Дата регистрации: 01.08.2003 |
возможно это есть в хелпе, не смотрел
------------------ Тяжело согнать курсором муху с монитора ... |
Re: Index On ... Unique и удаленная запись | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
А если:
------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Index On ... Unique и удаленная запись | |
---|---|
Равиль Автор Сообщений: 6549 Откуда: Уфа Дата регистрации: 01.08.2003 |
Повторный Go Top не спасет в этой ситуации ------------------ Тяжело согнать курсором муху с монитора ... |
Re: Index On ... Unique и удаленная запись | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
Равиль привет.
Это известная фича, что бы избежать делай фильтрованный индекс
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Index On ... Unique и удаленная запись | |
---|---|
Равиль Автор Сообщений: 6549 Откуда: Уфа Дата регистрации: 01.08.2003 |
Потестил немножко и выяснил, что это проявляется,
если удаленная запись является текущей и содержит первое уникальное значение индексируемого поля (выражения) например:
------------------ Тяжело согнать курсором муху с монитора ... |
Re: Index On ... Unique и удаленная запись | |
---|---|
Равиль Автор Сообщений: 6549 Откуда: Уфа Дата регистрации: 01.08.2003 |
Паша, привет - я подозревал конечно ------------------ Тяжело согнать курсором муху с монитора ... |
Re: Index On ... Unique и удаленная запись | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
Кстати, такая же байда с индексами кандидатами (Candidat). ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Index On ... Unique и удаленная запись | |
---|---|
Chemberzhy Сообщений: 13142 Откуда: Измаил Дата регистрации: 28.04.2009 |
Насколько я сейчас припоминаю, однажды столкнувшись с такой хренью, я просто раз и навсегда взял себе за правило в выражение индекса добавлять
------------------ Что-то с памятью моей стало, всё что было не со мной- помню. |
Re: Index On ... Unique и удаленная запись | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
Unique индексами вообще не надо пользоваться. У них куча проблем, и не только с deleted. Вот пример некорректной работы такого индекса:
|
Re: Index On ... Unique и удаленная запись | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Unique можно пользоваться в некоторых случаях, когда речь идет, например, о внешней НСИ, предназначенной только для чтения.
|
Re: Index On ... Unique и удаленная запись | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
По-моему Select distinct даже в FPD был.
|
Re: Index On ... Unique и удаленная запись | |
---|---|
sphinx Сообщений: 31180 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
+1 ------------------ "Veni, vidi, vici!"(с) |
Re: Index On ... Unique и удаленная запись | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Если речь идет об одновременном использовании в индексном выражении опций UNIQUE и FOR, то это вроде бы иногда будет приводить к некорректным результатам. Или не будет? |
Re: Index On ... Unique и удаленная запись | |
---|---|
Владимир Максимов Сообщений: 14098 Откуда: Москва Дата регистрации: 02.09.2000 |
Так индекс не анализирует признак удаления записи. Set Deleted - это же просто фильтр, накладываемый на данные. Т.е. некое "внешнее" (по отношению к индексу) ограничение
Тут Паша уже говорил, что если сделать индекс Candidat, удалить запись и попытаться создать запись с удаленным значением, то будет сообщение об ошибке о нарушении уникальности. Т.е. для индекса пометка на удаление ничего не значит. В справке VFP об этом говорится в описании настройки SET DELETED Цитата: Принципиально Set Deleted ничем не отличается от SET FILTER. Ты же не удивляешься, что SET FILTER не оказывает влияние на индекс... Так что, если нужно влияние на индекс, то только через выражение индекса или FOR-условие. В зависимости от того, как именно должно влиять |
Re: Index On ... Unique и удаленная запись | |
---|---|
Chemberzhy Сообщений: 13142 Откуда: Измаил Дата регистрации: 28.04.2009 |
Давно, конечно, это было. Еще раньше было на 2.6... Но, если память мне не изменяет, конструкция типа
К слову, применять такую конструкцию я начал именно еще с 2.6-го и оно у меня в правилах написания команд просто забилось в мозг как обязательное раз и навсегда. О! Еще вспомнил, для SET FILTER в 2.6-м я тоже всегда дописывал !DELETED(). Потому что в выборку не попадали данные, если первая запись в таблице, подходящая под условия, была помечена на удаление. Вроде так. Опять таки, если не запамятовал по старческому склерозу, последний раз по взрослому кодил лет 10 назад, а на 2.6-м вообще лет 15. ------------------ Что-то с памятью моей стало, всё что было не со мной- помню. Исправлено 5 раз(а). Последнее : Chemberzhy, 15.04.21 18:56 |
Re: Index On ... Unique и удаленная запись | |
---|---|
Равиль Автор Сообщений: 6549 Откуда: Уфа Дата регистрации: 01.08.2003 |
Спасибо - это все объясняет. ------------------ Тяжело согнать курсором муху с монитора ... |
Re: Index On ... Unique и удаленная запись | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
С !deleted() в индексах не приходилось работать. Могу лишь с уверенностью сказать, что при одновременном применении UNIQUE и FOR <условие> были случаи, когда записи "выпадали". Тут ведь вопрос в чем - что сначала выполняется: фильтр FOR или формирование индекса с опцией UNIQUE. Возможно, что при использовании условия !DELETED() сначала отрабатывает именно этот фильтр, а потом выполняется построение индекса. Но в общем случае, думается, что сначала строится индекс, а потом ставится фильтр FOR. И в таком случае опция UNIQUE иногда приводит к выпадению уникальных значений. Исправлено 3 раз(а). Последнее : Simple777, 15.04.21 19:35 |
Re: Index On ... Unique и удаленная запись | |
---|---|
Chemberzhy Сообщений: 13142 Откуда: Измаил Дата регистрации: 28.04.2009 |
В приоритете обработки всегда выборка и только потом группировка. Это математика. А любой, мне кажется, язык программирования прежде всего опирается на законы математики. То есть, сначала отработает физический фильтр по FOR и только потом сдвоенная функция UNIQUE: сперва группировка, потом расстановка по условиям заданного ранжира. ------------------ Что-то с памятью моей стало, всё что было не со мной- помню. Исправлено 3 раз(а). Последнее : Chemberzhy, 15.04.21 21:20 |
Re: Index On ... Unique и удаленная запись | |
---|---|
akvvohinc Сообщений: 4219 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата: Это можно даже увидеть, ведь процесс индексации, который проходит в 2 этапа, можно отобразить на экране или в строке статуса. Сначала генерируются ключи (keys generated), и видно что их количество не зависит от опции UNIQUE - количество сгенерированных ключей равно количеству записей что с UNIQUE, что без неё, но зависит от опции FOR - ключи будут создаваться только для записей, удовлетворяющих выражению FOR. А затем уже создаются теги (records indexed) и количество проиндексированных записей (что с FOR, что без FOR) будет меньше количества созданных ключей, если задана опция UNIQUE и есть одинаковые ключи. Цитата: Соответственно это не так. Исправлено 1 раз(а). Последнее : akvvohinc, 16.04.21 03:22 |
Re: Index On ... Unique и удаленная запись | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Означает ли это, что одновременное использование опций UNIQUE и FOR должно всегда корректно работать? По крайней мере в FPD 2.6 я сталкивался с ситуациями, когда результат был некорректен. Поэтому я предполагал, что сначала строится индекс по UNIQUE, а потом накладывается фильтр по условию FOR. Сейчас уже не припомню подробностей, но это было связано с фильтрующим поиском по внешней по отношению к моему приложению dbf-таблице. Таблица содержала адреса, где наименование улично-дорожных дорожных элементов (далеко не все знают, что так обобщенно называются виды "улиц" - улицы, переулки, проспекты, тракты, тупики, проезды и т.п.) было в отдельном поле. Пользователь имел возможность выполнить поиск по наименованию. Допустим, юзер хочет увидеть все наименования улиц, где в наименовании есть буква Ю. То есть его интересуют не адреса, а только наименования улиц. Он задаёт букву Ю, и далее надо вывести все не повторяющиеся наименования улиц с буквой Ю. Для этого создавался временный индекс по условию (пример условный) :
По какой-то причине иногда некоторые значения после такого индексирования "выпадали". Поэтому я стал избегать в дальнейшем одновременно применять UNIQUE и FOR при построении индексов. Исправлено 4 раз(а). Последнее : Simple777, 16.04.21 08:07 |
© 2000-2024 Fox Club  |