|
|
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
2 ЛП Да от трактора . Веселый ты мужик. А что индексы место не едят? Чем больше размер файла БД , тем больше тормозов при запуске. Именно при запуске. А так запустившись , ясен пень все летает с индексами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 23:28 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
Цитируем классиков "Если вы подумываете о повышении производительности, учтите, что денормализация всегда будет наилучшим решением. Однако, мы рекомендуем сначала полностью нормализовать базу данных (до 3НФ или выше), а затем провести денормализацию только в том случае, если это станет необходимым для существенного улучшения производительности." т1, с118 (для А2000) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 02:00 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
А что индексы место не едят? Чем больше размер файла БД , тем больше тормозов при запуске. Размер целочисленного индекса, как правило, меньше, чем длина текстового поля, к примеру, умноженного на число записей. Т.е. при правильной организации индексов размер нормализованой базы будет меньше, чем ненормализованой. Быстродействие нормализованой базы может быть как выше, так и ниже, чем ненормализованой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 08:17 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
Да , будет меньше. Никто и не спорит. Безусловно нормализация это очень важно. Но здесь главное не перегнуть палку. В любом деле вредна крайность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 08:45 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
Cat2Нормализация вовсе не предназначена для ускорения доступа к данным Двумя руками за Однако может привести и к ускорению - за счет меньшего объема данных. А может и к замедлению - за счет дополнительной работы по объединению кучи таблиц в один запрос, да еще с использованием каких-нибудь агрегатов/квазиагрегатов. EternalНо здесь главное не перегнуть палку. В любом деле вредна крайность. Тремя руками за. В течение своей бестолковой жизни я так и не видел базы в пятой нормальной форме. Оно может и правильно (5-я НФ), но уж больно геморройно программировать будет. EternalЧем больше размер файла БД , тем больше тормозов при запуске. Именно при запуске. У тебя при запуске что-то выполняется? Или просто базу с шифтом открыть - время занимает? Если просто открыть долго - значит что-то лечить надо в датском королевстве, индексы имхо здесь не при чем должны быть. И еще. Индексы на почти каждое поле - это все-таки то что я подумал? Т.е. почти каждое из 20 полей проиндексировано? Ты уверен, что оно тебе надо? При неправильном использовании индексы не ускоряют выборку, а замедляют ее. Тем более что в аксесе отсутствует возможность давать указания оптимизатору запросов какие индексы использовать, а какие нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 09:29 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
2 ЛП Да почти каждое поле индексированное. Потому, что почти по каждому производится поиск и выборка нужных записей. >Тем более что в аксесе отсутствует возможность давать указания оптимизатору запросов какие индексы использовать, а какие нет. RushMore в виду имеешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 09:35 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
Саныч, помоги человеку решиться на что-то. А он тебе невесту из Мончегорска устроит. Эфиопок там вроде нету ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 09:47 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
2 Лифчик В нашей дыре только невест искать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 09:52 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
Реализация номер раз (как есть у тебя). 100000 записей и индекс по текстовому полю. Выборка с условием по этому полю будет использовать этот немерянный индекс. Реализация номер два. 100000 записей в одной таблице, 100 записей в другой (справочник) с индексом по текстовому полю, связь между таблицами по числовому ключу. При выборке в условием на текстовое поле из справочника сначала используется индекс в маленькой таблице, отбираются какие-то записи, потом с использованием индекса связи (пресловутый рашмор) производится отсев данных в большой. Это необязательное поведение аксеса, но наиболее часто встречающееся. Как ты думаешь - в каком случае выборка будет быстрее? Правильный ответ - а хрен его знает товарисч майор. Зависит от данных и от наложенного условия. Например: А. Если условие на справочник отсеивает 95 записей из 100, и оставшимся 5 соответствует например 5000 записей из большой таблицы - надо использовать индексы и в справочнике, и в связи. Быстрее скорее всего будет второе решение. Б. А если у тебя условие отсеит одну запись из 100 в справочнике (оставит 99) и одну запись из 100000 в большой таблице (оставит 99999) - то нафиг тебе не нужны индексы, проще и быстрее полное сканирование сделать и каждую запись проверить. И в этом случае быстрее будет первое решение, особенно если аксес догадается не использовать монструозный текстовый индекс с с низкой селективностью. Но аксес может и не догадаться. И явным образом ему это не подсказать. Так же аксес может запутаться с несколькими условиями по нескольким индексам. Типа вместо того, чтобы использовать индекс И1, оставить 100 записей из 100000, и все дальнейшие проверки осуществить для каждой записи, он начнет использовать условие по индексу И2 (которое оставляет 10000 записей из 100000), условие по И3 (оставляющее 20000 из 100000), И1 (100 из 100000), а потом рашмором будет сводить эти 10000, 20000 и 100 записей. Вот и все, что я хотел сказать по поводу индексов (с) Форест Гамп ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 10:25 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
2 ЛП Спасибо за полезные замечания. Я их обязательно учту. Выборки у меня такого рода. К примеру условие выборки : вывести всех чуваков у которых скажем город такой то, национальность такая то, рост в таких то пределах , вес не больше такого то и еще там что то Т.е выборка по куче условий. На каждое поле у меня воткнут индекс. Access естественно начинает прокачку всех индексов. Но может действительно поубирать нафиг половину. Как видишь для запроса по куче условий надо выбирать по нескольким полям. Я сам экспериментировал и пришел к выводу, что если половину индексов убрать, бегает быстрей. Вот. Юзеру может придти в голову и задать целую гору условий , главное чтобы вылезли чуваки , которые подходят. Вообще ты знаешь, я не пользуюсь сохраненными запросами, использую VBA / SQL . Храню в базе отдельные запросы со статичными параметрами. Скажем ты предпочтения чему отдаешь? Сохраненным запросам или запросам из под VBA ? Наверное все таки от ситуации зависит. Понятно , что сохраненные запросы выполняются быстрей (jet не нужно из компилить), но запросы прямо из кода VBA мне кажутся очень гибкими. Конечно можно еще DAO с его QueryDef использовать, но в принципе этим не пользуюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:50 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
2 Eternal Выскажу свое мнение. В твоем случае (при ненормализованой базе) акцессу действительно приходится достаточно трудно. А теперь предположим, что необходимо выбрать чуваков по национальности "узбек", к примеру, в частично нормализованой базе - есть справочник с национальностями, а в основной таблице стоит код национальности. Как ты думаешь - медленее ли будет выполняться запрос отобрать записи с кодом ххх? Я думаю что быстрее, чем в случае индекса по текстовому полю, причем во много раз, особенно в сложных выборках. Это ИМХО, естественно, в твоем случае нужно пробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 14:01 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
По поводу индексов Сначала оцениваешь селективность индекса, т.е. какой процент записей остается при наложенном строгом условии (равенстве). Наилучшая селективность - у уникальных индексов. Наихудшая - например у индексов по логическому полю, причем с равномерным распределением по значениям (если у тебя 99% - True, 1% - False, то тоже может быть хорошая селективность... если выбираешь False) Далее оцениваешь индекс с позиции сложных условий (примерно как они будут формироваться). Т.е. для условия типа "Рост>100см And Рост<200см" селективность низкая, а для "Рост>174см And Рост<176см" - высокая. А дальше - думаешь сам. Если условие, наложенное на поле, отсеивает меньше 95% записей (т.е. оставляет больше 5%), то есть смысл задуматься - а не положить ли с пробором на такой индекс. выборка по куче условий Если есть наиболее часто встречающиеся комбинации полей - надо делать составные индексы. Один составной индекс (по нужным полям) - это лучше, чем несколько простых индексов на каждое поле. Скажем ты предпочтения чему отдаешь? Сохраненным запросам или запросам из под VBA Уже было обширное обсуждение. Поищи по форуму. Топик начат Нуф-Нуфом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 14:05 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
2 Odess Быстрей по числовом полю пойдет поиск. Это ясно и без экспериментов. Я посмотрел работу ненормализованной базы с полтинником тыс. записей. Скорость выборок меня вполне устроила. Я думаю все таки не нормализовывать. Уберу половину индексов. А если юзер будет жаловаться на быстродействие, то посмотрим. Я уже говориил , что база будет работать на мощной машине. Ну а как было в недавнем прошлом? Постоянно болела башка, на каком компе будет база фигачить , на дохлом или не. Тем более база не для коммерческого распостранения, а для одной конторы. Контора чуть ли не в соседнем доме, тем более заказчик мой хороший знакомый. Разберемся. Я вообще не думаю , что они забъют базу 50 000 записями. Вряд ли. Да и не скоро. Конечно я понимаю , что это не совсем скажем грамотно. Но.Но.Но. Кстати никто не разрабатывал подобную базу? (Топик что ли сделать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 14:13 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
EternalНу да например при указании национальности ошиблись и набрали "грузын" , а не "грузин". Но можно же в отдельной таблице хранить название национальностей и юзеру с помощью комбобокса можно выбирать только существующие. Тогда ошибки не будет. Правда может появиться какой то "кекс" с национальностью ,которая отсутствует в отдельной таблице. Тогда эту национальность сначала нужно добавлять туда. А потом из комбобокса. Я например в таком случае не делал бы отдельную таблицу для национальностей, для ввода национальности использовал бы комбобокс, но данные для него брал из введенных ранее национальностей, на вход в комбобокс ставил бы типа Ме.Реквери + Ме.Дропдаун, в комбобоксе автоподставление включено, ограничиться списком - выключено. Таким образом практически исключается вариант АзЫрбайджанец/АзИрбайджанец Но это годится когда чуваки из базы не стираются, когда стираются - их национальность из комбобокса изчезает, хотя если в базе будет одновременно около 30000 записей, то тогда не страшно. (Это если не хочется много таблиц делать или часто приходиться заносить данные, которых раньше не было) Также можно поступить например с городом, районом проживания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 21:10 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
но данные для него брал из введенных ранее национальностей Ага, особенно если записей так под миллион, а национальностей несколько сотен. Хотел бы я тогда посмотреть на открытие такой формочки ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 21:23 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! 2 ЛП По поводу выбора индексов для полей в зависимости от количества подходящих записей . Учту. >Если есть наиболее часто встречающиеся комбинации полей - надо делать >составные индексы. Один составной индекс (по нужным полям) - это лучше, >чем несколько простых индексов на каждое поле Думал об этом, но слишком тогда здоровый составной ключ получится. Сейчас посчитаю ??? 10 полей где то в составном индексе тогда выйдет . Что то я запамятовал, сколько полей максимум может быть в составном? Нет по моему составной не пойдет? Весь гемор как раз в том и заключается что поиск будет по любому полю большой таблицы. 2 Димасик Ну да, ввел юзер неверно "Грузынец " и потом пошел выбор этого же. Как раз получится нехорошо. "Ошибочные записи" будут плодится как кролики летом. Нет Димасик, твой способ может и оригинален , но не для этого случая. 2 Odess В общем ты прав, но миллионов анкет явно не будет. Их вообще я так думаю немного будет. Если только несколько десятков тысяч, но и то навряд ли. А я сижу и долблюсь . Готовлюсь навороченный индексированный поиск с помощью <seek> делать. А может в базе будет пару тысяч записей и все труды мои зря ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 22:23 |
|
||
|
Нормализация. В каких ситуациях можно ее не делать?
|
|||
|---|---|---|---|
|
#18+
Вообще я использую мой способ в таких случаях: При вводе счета в табличной форме в столбце Product Name вводится в комбобоксе имя товара (роусоурс из отдельной таблицы), например "Штаны", в столбце Product Remark опять же в комбобоксе, но с роусоурсем из предыдуших значений записей "Штаны", вводится "размер 45", записей около 100000, постоянно прибавляются, пока почти без тормозов, зато нет отдельной таблицы с ремарками для продуктов, которых (ремарков) очень много. Может способ в данном случае и неподходит, но зарекомендовал себя хорошо, так что при подходящем случае попробуйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2004, 18:24 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32377989&tid=1677162]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 520ms |

| 0 / 0 |
