|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TТы уж извини, но я все-таки повозмущаюсь: 1. В конце селекта надо добавить NOFILTER иначе выборки не происходит 2. Выборку надо делать не из курсора, а из таблицы, и расшаренной. Обычно так открыты в рабочем софте. 3. SET DELETED ON (а не OFF, т.к. обычно у всех стоит ON) хотя на результат у меня это не повлияло. 4. Не вижу смысла дописывать в запросе AND DELETED() (тебе надо было т.к. у тебя SET DELETED OFF) 5. Одного раза мало, сделал запрос в цикле и WHERE ID=i для разнообразия. Вобщем я его немного приблизил к реальности. И записей добавил, а то уж больно время маленькое получалось. 1. Вообще не понял. У меня работает во всех случаях. Вероятно, что-то я не знаю. 2. Хм. В ходе эксперимента специально был взят курсор, чтобы не было погрешностей работы с дисками. Потому что я физически не могу проконтролировать все процессы винды, которые будут писатть/читать на диск. А в работе с памятью это менее существенно. 3. А вот это бред. Смысл тогда делать индекс по DELETED, чтобы потом его не использовать? Кстати, именно это показывает условие Код: plaintext
Вероятно, потому, что именно это условие и показывало Вам, что Вы - не используете данный индекс. Вот Вы и выбросили его, негодного... И заблуждение про то, что типа Код: plaintext
автоматически ВКЛЮЧАЕТ индекс DELETED - оставьте другим... Ибо это уже не смешно. Кстати, вы еще с десяток индексов сделайте по другим полям, а потом выбирайте по ID - и снова удивляйтесь, как это индексы по другим полям Вам не помогают, а даже мешают! (не удержался, простите...) 4. Бред. Пункт 3. 5. Да и я делал это чуть менее 9000 раз... Dima TВообще-то в этих постах я по-другому выразился. Началось все с того что прошелмимо сильно расстроился что его индекс назвали тормозом. Тесты показали что это не так. Замедление на миллисекунды сложно назвать тормозом. Но и ускорения от него никакого. Что значит - по-другому? Это как понимать? То есть, то, что Вы пишете, на самом деле значит совсем другое? У Вас же два поста практически подряд, явно говорят - надо каждый день все прогонять. Чего сейчас отпираться то? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 10:51 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
ВладимирМПериодичность выполнение упаковки и переиндексации определяется конкретной задачей и личными предпочтениями программиста. Вполне возможно, что для [b]Dima T такая периодичность вполне оправдана.[/b] Однако соблюдены все условия "правильной" работы Владимир, выделенной фразой я засчитываю вам поражение. Ибо в нашем споре не было никаких условий про некую мифическую задачу Dima T . Кстати, даже он сам не говорил про некую свою задачу. Был разговор про ОБЩИЙ случай. Для всех. По теме топика. И в в ходе разговора никто не обязан предполагать или додумывать, что кто-то из оппонентов вдруг стал говорить не по теме разговора, а про свою, узко направленную, сугубо специфическую, неоднозначно определенную, никому не нужную "конкретную задачу". Потому что адекватные люди, если они хотят привести какой-нибудь специфический пример, они об этом говорят ДО ТОГО, как приводят пример. А не после, словами типа "так это же я типа пример, конкретный и специфический" - когда его в угол загнали в споре... А перебирать все случаи в жизни подробно - нам наших жизней не хватит. Глупое и бессмысленное занятие. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 11:03 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
мои суждения обращенные к Диме: итак моя задача сейчас поговорить с Вами на тему полезности индекса при наличии уд-х записей. т.е. сейчас мы не беседуем про: нужно паковать или нет (поговорим после). т.е. сейчас мы предполагаем, что есть неупак-я табличка и поймем, помогает ли наличие индекса в табличке с присутствующими уд.записями. т.е. мы попытаемся понять для чего разработчики "придумали это". итак в своем пример пожалуйста сделайте все-же автоинкр. идентификатор и затем с индексом и без выполните запрос SELECT Count(*) as cnt FROM mytable where id > 100 INTO CURSOR tmp nofilter результат доложите нам. т.е. я еще раз подвожу к мысли: можно ли тестировать "для чего придумали" только на каких-то простейших запросах? так-ли нужно не доверять оптимизатору, который нам сообщает, что для оптим-и он использует бинарный индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 11:42 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
BanditosВладимирМПериодичность выполнение упаковки и переиндексации определяется конкретной задачей и личными предпочтениями программиста. Вполне возможно, что для [b]Dima T такая периодичность вполне оправдана.[/b] Однако соблюдены все условия "правильной" работы Владимир, выделенной фразой я засчитываю вам поражение. Ибо в нашем споре не было никаких условий про некую мифическую задачу Dima T . Кстати, даже он сам не говорил про некую свою задачу. Сформулирую по другому Если одна, конкретная задача требует ежедневную упаковку, означает ли это, что, в общем случае , без "привязки" к "некой мифической задаче" периодическую упаковку базы данных не надо делать вообще? Чтобы опять не скатится к банальной перебранке объясню свою позицию. Я исхожу из того, что те люди с которыми я общаюсь - это люди "вменяемые" и грамотные. Раз они долгое время пишут и сопровождают работающие приложения, значит, имеют представление о том, что надо делать и чего не надо. Другое дело, что далеко не каждый может внятно объяснить свою позицию. Просто не умеет. Или же человек отвечает "по месту" на конкретный выпад со стороны оппонента. Поэтому, я пытаюсь понять некую "общую" позицию того, с кем я разговариваю. По возможности, не цепляясь к отдельным словам, если это не имеет принципиального значения. В данном случае, с моей точки зрения, позиции спорящих сторон выглядят следующим образом: Позиция 1 1. Если в качестве хранилища данных используются DBF-таблицы, то это хранилище требует периодической упаковки (PACK) и переиндексации. Вне зависимости от того, насколько правильно работает приложение 2. Индекс по deleted() не оказывает существенного влияния на производительность приложения, в силу относительно малого количества записей помеченных как удаленные Позиция 2 1. До тех пор, пока не возникнут явные ошибки приложения выполнять упаковку и переиндексацию нет необходимости. 2. В силу того, что записи, помеченные как удаленные, физически удаляются чрезвычайно редко и их относительно много необходим индекс по deleted() Так вот, я придерживаюсь первой позиции. Необходимо регулярное обслуживание базы данных. Как следствие, индекс по deleted() - не имеет смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 13:02 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
ВладимирМТак вот, я придерживаюсь первой позиции. Необходимо регулярное обслуживание базы данных. Как следствие, индекс по deleted() - не имеет смысла. Регулярное обслуживание и ежедневная упаковка с переиндексацией - ДВЕ РАЗНЫЕ ВЕЩИ!!! И не нужно одно выдавать за другое. За регулярное обслуживание - админу плюс, за ежедневную упаковку - найти виновных и расстрелять! Кстати, меня просто убивает тот факт, что Вы делаете индекс по DELETED, упорно его не используете, и утверждаете, что он - не имеет смысла. Владимир, говоря Вашими же словами, индекс по ID - тоже не имеет смысла. А что? Я тут делал выборку по полю NAME, так вот, наличие индекса по ID мне не только не помогало, но и мешало! Как следствие - индекс по ID не имеет смысла! ЗЫ. А про бинарные индексы прочитайте. Подумайте, что это такое. Про слово "логических", которое там упоминается. Бесплатный совет: про удаленные записи, которые там приведены КАК ПРИМЕР, не читайте. Представьте лучше таблицу, в которой есть ЛОГИЧЕСКОЕ поле "ПРИЗЫВНИК", в котором значения "True" - призывник, "FALSE" - не призывник... Создайте таблицу, протестируйте... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 13:19 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
BanditosDima TТы уж извини, но я все-таки повозмущаюсь: 1. В конце селекта надо добавить NOFILTER иначе выборки не происходит 2. Выборку надо делать не из курсора, а из таблицы, и расшаренной. Обычно так открыты в рабочем софте. 3. SET DELETED ON (а не OFF, т.к. обычно у всех стоит ON) хотя на результат у меня это не повлияло. 4. Не вижу смысла дописывать в запросе AND DELETED() (тебе надо было т.к. у тебя SET DELETED OFF) 5. Одного раза мало, сделал запрос в цикле и WHERE ID=i для разнообразия. Вобщем я его немного приблизил к реальности. И записей добавил, а то уж больно время маленькое получалось. 1. Вообще не понял. У меня работает во всех случаях. Вероятно, что-то я не знаю. Работает, но выборки не происходит :) В случае простых селектов фокс накладывает фильтр, примерно так: Код: plaintext 1. 2.
Для замеров это принципиально, т.к. выборки всех записей не происходит, соответственно и время выполнения другое. Banditos2. Хм. В ходе эксперимента специально был взят курсор, чтобы не было погрешностей работы с дисками. Потому что я физически не могу проконтролировать все процессы винды, которые будут писатть/читать на диск. А в работе с памятью это менее существенно. Ну померил ты скорость проца и памяти. И чего? главный тормоза сетка и винт, даже в твоем случае как только курсор в кэш фокса не влезет - начнется своп и время увеличится на порядки, а своп начнется тем раньше, чем объем больше. Banditos3. А вот это бред. Смысл тогда делать индекс по DELETED, чтобы потом его не использовать? Индекс должен задействоваться автоматически при его наличии, согласно хэлпу: HELPВместо этого, вы можете создать и использовать бинарный индекс, который оптимизирует бит, отвечающий за удаление записи, для увеличения производтельности, когда вы выдаете команду SET DELETED ON Как я понимаю SET DELETED ON это автоматическое добавление "and deleted()" во все условия. BanditosКстати, именно это показывает условие Код: plaintext
Вероятно, потому, что именно это условие и показывало Вам, что Вы - не используете данный индекс. Вот Вы и выбросили его, негодного... Я вообще никогда не смотрю чего SYS(3054) показывает, а выбросил чтобы он замеры не портил. Когда меня интересует производительность - я меряю время. Запускал пробовал оба варианта, с "and deleted()" немного медленнее . Код теста выше приведен, запусти так и так, выложи что получилось. BanditosИ заблуждение про то, что типа Код: plaintext
автоматически ВКЛЮЧАЕТ индекс DELETED - оставьте другим... Ибо это уже не смешно. Кстати, вы еще с десяток индексов сделайте по другим полям, а потом выбирайте по ID - и снова удивляйтесь, как это индексы по другим полям Вам не помогают, а даже мешают! (не удержался, простите...) ХЗ чего там тебе мешает, у меня так пишет: SYS(3054, 2)SELECT * FROM mytable WHERE ID=10 INTO CURSOR tmp nofilter Using index tag Mainid to rushmore optimize table mytable Using index tag Del to rushmore optimize table mytable Rushmore optimization level for table mytable: full ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 13:33 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TИндекс должен задействоваться автоматически при его наличии, согласно хэлпу: HELPВместо этого, вы можете создать и использовать бинарный индекс, который оптимизирует бит, отвечающий за удаление записи, для увеличения производтельности, когда вы выдаете команду SET DELETED ON Как я понимаю SET DELETED ON это автоматическое добавление "and deleted()" во все условия. Это кому индекс должен задействоваться? С чего бы? А тот факт, что оптимизатор его не использует, как бы Вам не намекает, что индекс НЕ ЗАДЕЙСТВОВАН? Кстати, а откуда хелпик? У меня в хелпе в комментарии к команде "SET DELETED" указано: HELPВыполняемые Запросы, использующие для тестирования статуса "удаления" записей функцию DELETED( ), могут быть оптимизированы по технологии Rushmore Query Optimization , для этого должен быть в наличии активный индекс по функции DELETED( ) исходной таблицы. И больше всего веселит Ваше "как я понимаю". Ну, если все дело только в Вашем понимании, тогда да, спор бессмыслен. Ибо Ваше понимание неправильное, и действительность совсем другая. Сказали бы сразу - "а я так понимаю это и это" - вопросов бы не было... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 13:48 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
BanditosРегулярное обслуживание и ежедневная упаковка с переиндексацией - ДВЕ РАЗНЫЕ ВЕЩИ!!! И не нужно одно выдавать за другое. И в чем же заключается это "Регулярное обслуживание" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 13:55 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TBanditosРегулярное обслуживание и ежедневная упаковка с переиндексацией - ДВЕ РАЗНЫЕ ВЕЩИ!!! И не нужно одно выдавать за другое. И в чем же заключается это "Регулярное обслуживание" ? Я Вас удивлю, но... (барабанная дробь) в упаковке и индексации!!! ЗЫ. Внимание: ищем разницу в "в упаковке и индексации" и в "ежедневной в упаковке и индексации". И думаем, думаем... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 13:59 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
BanditosЭто кому индекс должен задействоваться? С чего бы? А тот факт, что оптимизатор его не использует, как бы Вам не намекает, что индекс НЕ ЗАДЕЙСТВОВАН? Я твой любимый SYS(3054,2) уже процитировал, еще раз то что у меня он пишет: SYS(3054, 2)SELECT * FROM mytable WHERE ID=10 INTO CURSOR tmp nofilter Using index tag Mainid to rushmore optimize table mytable Using index tag Del to rushmore optimize table mytable Rushmore optimization level for table mytable: full Никаких "and deleted()" только SET DELETED ON BanditosКстати, а откуда хелпик? Тынц BanditosИ больше всего веселит Ваше "как я понимаю". Ну, если все дело только в Вашем понимании, тогда да, спор бессмыслен. Ибо Ваше понимание неправильное, и действительность совсем другая. Сказали бы сразу - "а я так понимаю это и это" - вопросов бы не было... Если б читал внимательно, не переспрашивал бы по два раза. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 14:02 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TЯ твой любимый SYS(3054,2) уже процитировал, еще раз то что у меня он пишет: SYS(3054, 2)SELECT * FROM mytable WHERE ID=10 INTO CURSOR tmp nofilter Using index tag Mainid to rushmore optimize table mytable Using index tag Del to rushmore optimize table mytable Rushmore optimization level for table mytable: full Никаких "and deleted()" только SET DELETED ON прекрасно, то что оптимизатор по-любому использует бинарный индекс независимо от того есть ли в таб-ке уд-е записи или их нет это пугает? я Вас просил остановиться только на таблицах с наличием уд-х записей и проверить запрос: SELECT Count(*) as cnt FROM mytable where id > 100 INTO CURSOR tmp nofilter намекая на то, что только тестом с придуманным Вами запросом невозможно понять для чего нужен этот индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 14:22 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
[quot Dima T Тынц [/quot] Т.е. не смотря на этот превосходный хелп с примерами, в котором четко написано, когда достигается и когда не достигается оптимизация, Вы все равно продолжаете утверждать, что Ваше тестирование показательно и индекс по DELETED не нужен? Т.е. все, что написано в этом хелпе - бред? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 14:25 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
BanditosЗЫ. Внимание: ищем разницу в "в упаковке и индексации" и в "ежедневной в упаковке и индексации". И думаем, думаем... Запусти этот код, посмотри на результаты, и подумай чего может произойти пока ты соизволишь свое "регулярное обслуживание" провести: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 14:26 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TЗапусти этот код, посмотри на результаты, и подумай чего может произойти пока ты соизволишь свое "регулярное обслуживание" провести: какое отношение этот тест имеет к советам про ежедневную упаковку таблиц (как я понимаю всех таблиц в приложении) ? ЗЫ: евреи шоб не болел писюн знаешь шо делают? не жалко? говорить про "зачем это надо" (бинарн индекс.) будем? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 14:39 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima T, Вы издеваетесь? Вы подменяете индексы и удивляетесь разному результату? За подобный код у меня хомячки летали по коридору, как ошпаренные! За ручное подкладывание таблиц с одной копии, а индексов из другой - и без индексации - расстрел! Что же я должен был увидеть в этом коде и результате тестирования? То, что индексы автоматически не пересобираются при открытии таблицы? Это я знаю. То, что ваш случай может произойти только в случае РУЧНОГО вмешательства криворукого программера - тоже знаю. Так что же я должен был увидеть? Что нового почерпнуть должен был я? ЗЫ. Когда я увижу такую ситуацию, я не буду каждый день "упаковывать и индексировать". Я буду каждый день пилить автора сего идиотизма до тех пор, пока он не исправит! ЗЫЫ. Не индексация здесь нужна, а понижение в должности... или увольнение... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 14:42 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
BanditosВладимирМТак вот, я придерживаюсь первой позиции. Необходимо регулярное обслуживание базы данных. Как следствие, индекс по deleted() - не имеет смысла. Регулярное обслуживание и ежедневная упаковка с переиндексацией - ДВЕ РАЗНЫЕ ВЕЩИ!!! И не нужно одно выдавать за другое. За регулярное обслуживание - админу плюс, за ежедневную упаковку - найти виновных и расстрелять! Почему? Какая периодичность обслуживания является "плюсом", а какая "расстрел на месте"? Каковы критерии, определяющие периодичность обслуживания базы? BanditosКстати, меня просто убивает тот факт, что Вы делаете индекс по DELETED, упорно его не используете, и утверждаете, что он - не имеет смысла. Извините, если повторю то, что Вы и так знаете. При настройке SET DELETED ON, в случае наличия индекса по Deleted() он используется . Вне зависимости от наличия условия Deleted() в опции WHERE запроса. Это наглядно видно, если использовать настройку SYS(3054,1). Ну, а раз используется, то, соответственно, оказывает влияние на время выполнения запроса. О чем, собственно, все тесты и говорят BanditosВладимир, говоря Вашими же словами, индекс по ID - тоже не имеет смысла. А что? Я тут делал выборку по полю NAME, так вот, наличие индекса по ID мне не только не помогало, но и мешало! Как следствие - индекс по ID не имеет смысла! Если Вы думали пошутить, то шутка не удалась, поскольку, если Вы не используете поиск по ID, то, действительно, индекс по ID - не нужен. В данном, конкретном запросе. Ведь индекс по ID создается вовсе не для поиска по Name, а для поиска именно по ID. А вот индекс по Deleted() используется каждый раз в любом запросе если указана настройка SET DELETED ON. Как следствие, влияет на скорость выполнения ВСЕХ запросов. Без исключения. BanditosЗЫ. А про бинарные индексы прочитайте. Подумайте, что это такое. Про слово "логических", которое там упоминается. Бесплатный совет: про удаленные записи, которые там приведены КАК ПРИМЕР, не читайте. Представьте лучше таблицу, в которой есть ЛОГИЧЕСКОЕ поле "ПРИЗЫВНИК", в котором значения "True" - призывник, "FALSE" - не призывник... Создайте таблицу, протестируйте... Вы не правильно предстваляете себе цель и назначение логических полей. Поле "Призывник", если оно логического типа, следует интерпретировать как "А является ли данный человек призывником?". Это вовсе не "призывник/не призывник". Это уже Ваше "домысливание", что данное поле может иметь всего-лишь два значения. На самом деле, даже в данном случае - это далеко не так. Ведь могут быть много разных состояний степени "призванности". Т.е. логические поля - ни в коем случае не справочники. Это именно признаки . Некий не явный вопрос, подразумевающий только ответ типа Да/Нет. Если же Вы начинаете интерпретировать значение Да/Нет, то это означает, что Вы не правильно выбрали тип данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 15:12 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
BanditosDima T, Вы издеваетесь? Вы подменяете индексы и удивляетесь разному результату? Я тебе показал что бывает при битом индексе. Подменять руками его не обязательно, достаточно того что комп на котором выполнится "UPDATE чего-нибудь" успеет записать изменение в DBF и не успеет в CDX (или наоборот), по любой причине: железо, сетка, пользователь задачу снял. Это редкость, но бывает, т.к. запись последовательно происходит, сначала один файл, затем второй. И если это произойдет, то ближайшей переиндексации результаты запросов будут с ошибкой, если это будет долго продолжаться, то это приведет к тому что какой-нибудь пользователь это увидит и поправит согласно своим возможностям (т.е. усугубит проблему), и потом эти косяки надо будет кому-то разгребать. Я этим "кем-то" был уже несколько раз. Поэтому предпочитаю минимизировать интервал с момента сбоя до исправления. У меня есть возможность индексировать базу каждый день, поэтому я ей пользуюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 15:28 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TBanditosDima T, Вы издеваетесь? Вы подменяете индексы и удивляетесь разному результату? Я тебе показал что бывает при битом индексе. Подменять руками его не обязательно, достаточно того что комп на котором выполнится "UPDATE чего-нибудь" успеет записать изменение в DBF и не успеет в CDX (или наоборот), по любой причине: железо, сетка, пользователь задачу снял. Это редкость, но бывает, т.к. запись последовательно происходит, сначала один файл, затем второй. И если это произойдет, то ближайшей переиндексации результаты запросов будут с ошибкой, если это будет долго продолжаться, то это приведет к тому что какой-нибудь пользователь это увидит и поправит согласно своим возможностям (т.е. усугубит проблему), и потом эти косяки надо будет кому-то разгребать. Я этим "кем-то" был уже несколько раз. Поэтому предпочитаю минимизировать интервал с момента сбоя до исправления. У меня есть возможность индексировать базу каждый день, поэтому я ей пользуюсь. ок., мы Вам верим - индексы бьются у Вас каждый день. при чем здесь УПАКОВКА? какое отношение имеет создание индексов к УПАКОВКЕ таблиц? почему нужно паковать все таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 15:31 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
ВладимирМИзвините, если повторю то, что Вы и так знаете. При настройке SET DELETED ON, в случае наличия индекса по Deleted() он используется . Вне зависимости от наличия условия Deleted() в опции WHERE запроса. Это наглядно видно, если использовать настройку SYS(3054,1). Ну, а раз используется, то, соответственно, оказывает влияние на время выполнения запроса. О чем, собственно, все тесты и говорят Не извиняю. Ибо это действительно я знаю. И понимаю. В отличии от Вас, к сожалению. То, что индексы используются - уже хорошо, уже прогресс. Это радует, что мы с Вами дошли до момента, когда индексы у нас однозначно задействованы. И дня не прошло. Кстати, о каких тестах Вы говорите? Вы проводили какие-то тесты, а нам ничего не сказали? Не хорошо. Итак, о тестах. Тестовая среда: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Тест: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Так вот. Если создать тестовую среду без: Код: plaintext
Что Вы там тестируете, интересно? ЗЫ. А бинарные индексы Вы все же не понимаете... ЗЫЫ. Про то, что Вы расписали мою задачу, в которой было всего 2 значения, на другой набор значений и при этом обвинили меня, что это я что-то додумал - вообще не хочу комментировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 15:57 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
BanditosSELECT * FROM mytable WHERE ID=10 INTO CURSOR tmp Я уже писал что это не выборка, а поиск первой записи удовлетворяющей условию, т.е. равносильно команде Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 16:26 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
BanditosТак вот. Если создать тестовую среду без: Код: plaintext
а если сделать PACK ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 16:27 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TBanditosТак вот. Если создать тестовую среду без: Код: plaintext
а если сделать PACK ? зачем? мы пытаемся вести разговор про то зачем индекс в таблице с имеющимися удаленными записями. почему Вы игнорируете просьбу и не желаете поговорить про оптимизацию в непакованных таблицах и проверить запрос, отличающийся от Вашего, который Вы используете в своем тесте? (у Вас в реальном приложении всегда заспросы одного типа? поиск по айди записи?) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 16:40 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TBanditosТак вот. Если создать тестовую среду без: Код: plaintext
а если сделать PACK ? А если по пустой таблице? Знаете, я конечно не уверен, но почти догадываюсь, что один и тот же запрос по таблице в сто тысяч миллионов записей будет почти так же быстр, как по таблице с тремя записями. А если и будет медленнее, то не намного. Возможно, все зависит от установок типа DELETE, FILTER, может быть BINARY... Хотя я могу и ошибаться... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 17:03 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Юристишко-выпускникя Вас просил остановиться только на таблицах с наличием уд-х записей и проверить запрос: SELECT Count(*) as cnt FROM mytable where id > 100 INTO CURSOR tmp nofilter намекая на то, что только тестом с придуманным Вами запросом невозможно понять для чего нужен этот индекс. Проверил твой запрос, код теста тут: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
Результат в твою пользу, ускорение более чем в 100 раз, этому запросу очень нужен твой индекс: Создали индекс MainID Тэгов: 1 Время: 5980,0 Время: 5973,0 Время: 5907,0 Время: 5928,0 Время: 5894,0 Время: 5928,0 Время: 5911,0 Время: 5931,0 Время: 5902,0 Время: 5930,0 Создали индекс Del Тэгов: 2 Время: 67,0 Время: 42,0 Время: 42,0 Время: 43,0 Время: 42,0 Время: 54,0 Время: 43,0 Время: 43,0 Время: 45,0 Время: 45,0 Правда без индекса по ID твой хитрый индекс становится балластом: Без индексов Тэгов: 0 Время: 5967,0 Время: 5919,0 Время: 5908,0 Время: 5911,0 Время: 5911,0 Время: 5911,0 Время: 5918,0 Время: 5933,0 Время: 5939,0 Время: 5937,0 Создали индекс Del Тэгов: 1 Время: 13551 Время: 6377,0 Время: 6391,0 Время: 6386,0 Время: 6390,0 Время: 6399,0 Время: 6389,0 Время: 6390,0 Время: 6434,0 Время: 6409,0 Тут похоже какой-то баг оптимизатора на подобных запросах, т.к. совсем без индексов и с индексом только по ID время одинаковое. Еще поизучаю, не ликуй раньше времени :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 17:08 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TРезультат в твою пользу, ускорение более чем в 100 раз, этому запросу очень нужен твой индекс: Правда без индекса по ID твой хитрый индекс становится балластом: а кто утверждал, что одиночный бинарн.индекс оптим-ет выборку по айди запси? для оптим-и выборки по айди записи как раз и нужен индекс по ID Dima TЕще поизучаю, не ликуй раньше времени :) мне ликование не нужно. мне нужно, чтобы кулинар-теоретик заткнулся и ушел учить детей. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 17:13 |
|
|
start [/forum/topic.php?fid=41&msg=37143530&tid=1584516]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 284ms |
0 / 0 |