Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

билет 1

.pdf
Скачиваний:
12
Добавлен:
12.04.2015
Размер:
910.57 Кб
Скачать

Создание и построение индексов

Обычно все необходимые индексы создаются при создании таблицы. Все столбцы, объявленные как PRIMARY KEY, KEY, UNIQUE или INDEX, будут индексированы.

Иногда выясняется, что многие запросы используют значения неиндексиро-ванного столбца, — в этом случае с помощью оператора CREATE INDEX можнодобавить новый индекс.

Интересно, что перед выполнением оператор CREATE INDEX преобразуется в оператор ALTER TABLE. Оператор ALTER TABLE можно использовать и для создания индексов, и для решения многих других задач.

Можно, например, добавить индекс к таблице employee так: create index name on employee(name);

В результате будет создан индекс с именем name на основе значений поля name из таблицы employee.

Опций у оператора create index не слишком много. Перед ключевым словом index может присутствовать UNIQUE, требующее уникальности ограничения.

Еще одна опция относится к индексам на основе char и var char и позволяетсоздать индекс по первым нескольким символам поля. Это можно сделать, указавв скобках

после имени индексируемого столбца число символов, которые следует использовать, например:

create index part_name on employee(name(5)); Это делается потому, что индексы на основе текстовых данных работают не слишком эффективно по сравнению с индексами на основе числовых, а индексация по первым нескольким символам улучшает производительность.

Создаются индексы в системах управления базами данных при помощи уже известного нам оператора Create, но только с добавлением ключевого слова index. Выглядит такой оператор следующим образом:

Create indexимя индекса

Onимя базового отношения (имя атрибута,..);

Здесь мы видим знакомый нам металингвистический символ «,..», обозначающий возможность повтора аргумента через запятую, т. е. в этом операторе может быть создан индекс, соответствующий нескольким атрибутам.

Если требуется объявить уникальный индекс, перед словом index добавляют ключевое слово unique, и тогда весь оператор создания в базовом отношении индекса принимает следующий вид:

Create unique indexимя индекса

On имя базового отношения (имя атрибута);

Тогда в самом общем виде, если вспомнить правило обозначения необязательных элементов (металингвистический символ []), оператор создания индекса в базовом отношении будет выглядеть следующим образом:

Create [unique] indexимя индекса

On имя базового отношения (имя атрибута,..);

Если требуется удалить из базового отношения уже имеющийся индекс, используют оператор Drop, также уже известный нам:

Drop index {имя базового отношения. Имя индекса},.. ;

Почему здесь используется уточненное имя индекса «имя базового отношения. Имя индекса»? В операторе удаления индекса всегда используется его уточненное имя, потому что имя индекса должно быть уникальным в пределах одного отношения, но не больше.

·индексы необходимо создавать для столбцов, которые используются в джойнах, по которым часто производится поиск и операции сортировки. При этом необходимо учесть, что индексы всегда автоматически создаются для столбцов, на которые накладывается ограничение primary key. Чаще всего они создаются и для столбцов с foreign key (в Access - автоматически);

·индекс обязательно в автоматическом режиме создается для столбцов, на которые наложено ограничение уникальности;

·лучше всего индексы создавать для тех полей, в которых - минимальное число повторяющихся значений и данные распределены равномерно. В Oracle есть специальные битовые индексы для столбцов с большим количеством повторяющихся значений, в SQL Server и Access такой разновидности индексов не предусмотрено;

·если поиск постоянно производится по определенному набору столбцов (одновременно), то в этом случае, возможно, есть смысл создать композитный индекс (только в SQL Server) - один индекс для группы столбцов;

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

·индексы можно создавать не только для таблиц, но и для представлений (только в SQL Server). Преимущества - возможность вычислять поля не в момент запроса, а в момент появления новых значений в таблицах.

Ключи и индексы

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

Первичный ключ однозначно определяет запись в таблице. Первичный ключ однозначно определяет запись в таблице, в то время как внешний ключ используется для связи с первичным ключом другой таблицы.

Однако, очень часто ключевое поле не несет никакой смысловой нагрузки и является просто идентификатором объекта в таблице. Во многих случаях удобно использовать в качестве ключа поле счетчика (Counter field). При этом вся ответственность по поддержанию уникальности ключевого поля снимается с пользователя и перекладывается на процессор баз данных. Поле счетчика представляет собой четырехбайтовое целое число (Long) и автоматически увеличивается на единицу при добавлении пользователем новой записи в таблицу.

Данные запоминаются в таблице в том порядке, в котором они вводятся пользователем. Это, так называемый, физический порядок следования записей. Однако, часто требуется представить данные в другом, отличном от физического, порядке. Например может потребоваться просмотреть данные об авторах книг, упорядоченные по алфавиту. Кроме того, часто необходимо найти в большом объеме информации запись, удовлетворяющую определенному критерию. Простой перебор записей при поиске в большой таблице может потребовать достаточно много времени и поэтому будет неэффективным.

Одними из основных требований, предъявляемым к системам управления базами данных, являются возможность представления данных в определенном, отличном от физического, порядке и возможность быстрого поиска определенной записи. Эффективным средством решения этих задач является использование индексов.

Индекс представляет собой таблицу, которая содержит ключевые значения для каждой записи в таблице данных и записанные в порядке, требуемом для пользователя. Ключевые значения определяются на основе одного или нескольких полей таблицы. Кроме того, индекс содержит уникальные ссылки на соответствующие записи в таблице. На рис.1.12 показан фрагмент таблицы CUSTOMERS, содержащей информацию о покупателях, и индекс IDX_NAME, построенный на основе поля Name таблицы CUSTOMERS. Индекс IDX_NAME содержит значения ключевого поля Name, упорядоченные в алфавитном порядке, и ссылки на соответствующие записи в таблице CUSTOMERS.

Рис.1.12. Связь между таблицей и индексом.

Каждая таблица может иметь несколько различных индексов, каждый из которых определяет свой собственный порядок следования записей. Таким образом, каждый индекс используется для представления одних и тех же данных, но упорядоченных различным образом.

Вообще говоря, таблицы в базе данных могут и не иметь индексов. В этом случае для большой таблицы время поиска определенной записи может быть весьма значительным и использование индекса становиться необходимым. С другой стороны, не следует увлекаться созданием слишком большого количества индексов, так как это может заметно увеличить время необходимое для обновления базы данных и значительно увеличить размер файла базы данных.

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

Хотя в большинстве случаев для представления данных в определенном порядке достаточно использовать простой индекс, часто возникают ситуации, где не обойтись без использования составных индексов. Составной индекс строится на основе значений двух или более полей таблицы. Хорошей иллюстрацией использования составных индексов может служить база данных родственников при генеалогических исследованиях какойлибо фамилии. Понятно, что использование в качестве простого индекса фамилии человека в данном случае недопустимо. Даже использование составного индекса, основанного на полях имени, фамилии и отчества может быть неэффективным, так как и в этом случае все равно возможно существование достаточно большого числа однофамильцев. Выходом из положения может быть использование составного индекса,

основанного, например, на следующих полях таблицы: имя, фамилия, отчество, город и номер телефона.

Поиск по индексу

Индексы применяются для быстрого поиска строк с указанным значением одного столбца. Без индекса чтение таблицы осуществляется по всей таблице начиная с первой записи, пока не будут найдены соответствующие строки. Чем больше таблица, тем больше накладные расходы.

Например, для такого запроса, как

SELECT

FROM Продажи

ORDER BY Номер_продавца

может быть создан такой план выполнения:

1.Сканирование кластерного индекса для первичного ключа таблицы Продажи.

2.Сортировка результатов шага 1 по столбцу Номер_продавца.

3.Возврат приложению результатов шага 2.

Оптимизатор запросов (компонент СУБД) использует хранящуюся в базе данных вместе с таблицами и индексами статистическую информацию, на основе которой он оценивает альтернативные способы формирования результатов запроса. Например, команду ORDER BY в инструкции SELECT можно выполнить с использованием имеющегося в

базе индекса, либо же путем физической сортировки строк. Оптимизатор старается выбрать самый эффективный план выполнения запроса.

Изучение планов выполнения запросов, созданных оптимизатором, позволяет решить, как ускорить выполнение запроса — изменить сам запрос или создать в базе данных дополнительный индекс. Некоторые СУБД позволяют явно влиять на то, как именно оптимизатор формирует план, для чего имеется особый язык подсказок.

Архитектура

Существует два типа индексов: кластерные и некластерные. При наличии кластерного индекса строки таблицы упорядочены по значению ключа этого индекса. Если в таблице нет кластерного индекса, таблица называется кучей[3]. Некластерный индекс, созданный для такой таблицы, содержит только указатели на записи таблицы. Кластерный индекс может быть только одним для каждой таблицы, но каждая таблица может иметь несколько различных некластерных индексов, каждый из которых определяет свой собственный порядок следования записей.

Индексы могут быть реализованы различными структурами. Наиболее частоупотребимы B*-деревья, B+-деревья, B-деревья и хеши.

Последовательность столбцов в составном индексе

Последовательность, в которой столбцы представлены в составном индексе, достаточно важна. Дело в том, что получить набор данных по запросу, затрагивающему только первый из проиндексированных столбцов, можно. Однако в большинстве СУБД

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

Например, представим себе телефонный справочник, отсортированный вначале по городу, затем по фамилии, и затем по имени. Если вы знаете город, вы можете легко найти все телефоны этого города. Однако в таком справочнике будет весьма трудоёмко найти все телефоны, записанные на определённую фамилию — для этого необходимо посмотреть в секцию каждого города и поискать там нужную фамилию. Некоторые СУБД выполняют эту работу, остальные же просто не используют такой индекс.

Производительность

Для оптимальной производительности запросов индексы обычно создаются на тех столбцах таблицы, которые часто используются в запросах. Для одной таблицы может быть создано несколько индексов. Однако увеличение числа индексов замедляет операции добавления, обновления, удаления строк таблицы, поскольку при этом приходится обновлять сами индексы. Кроме того, индексы занимают дополнительный объем памяти, поэтому перед созданием индекса следует убедиться, что планируемый выигрыш в производительности запросов превысит дополнительную затрату ресурсов компьютера на сопровождение индекса.

Вопрос 5

Общая теория ситем

Общая теория систем (теория систем) — научная и методологическая концепция исследования объектов, представляющих собой системы. Она тесно связана ссистемным подходом и является конкретизацией его принципов и методов. Первый вариант общей теории систем был выдвинут Людвигом фон Берталанфи. Его основная идея состоит в признании изоморфизма законов, управляющих функционированием системных объектов Задачи общей теории сис-м:

1.описать наиб. общие законы, которым подчиняется вся сис-ма; 2.создать единую платформу для общения специалистов разных областей. Сущ-ет два подхода к описанию систем:

1.изучение конкрет. сис-м, разраб-ка мат. моделей и обобщение их; 2.разраб-ка такой универсальной мат. модели, в рамках кт можно описать любую сис-му путём подбора параметров модели.

Предметом исследований в рамках этой теории является изучение:

различных классов, видов и типов систем;

основных принципов и закономерностей поведения систем (например, принцип узкого места);

процессов функционирования и развития систем (например, равновесие, эволюция, адаптация, сверхмедленные процессы, переходные процессы).

В границах теории систем характеристики любого сложно организованного целого рассматриваются сквозь призму четырёх фундаментальных определяющих факторов:

устройство системы;

её состав (подсистемы, элементы);

текущее глобальное состояние системной обусловленности;

среда, в границах которой развёртываются все её организующие процессы.

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

Предыстория и перспективы развития

Как и всякая научная концепция, общая теория систем базируется на результатах предыдущих исследований. Исторически «зачатки исследования систем и структур в общем виде возникли достаточно давно. С конца XIX века эти исследования приняли систематический характер (А.Эспинас, Н. А. Белов, А. А. Богданов, Т.Котарбиньский, М.Петрович и др.)»[2]. Так, Л. фон Берталанфи указывал на глубинную связь теории систем с философией Г. В. Лейбница и Николая Кузанского: «Конечно, как и любое другое научное понятие, понятие системы имеет свою долгую историю… В этой связи необходимо упомянуть „натуральную философию“ Лейбница, Николая Кузанского с его совпадением противоположностей, мистическую медицину Парацельса, предложенную Вико и Ибн-Халдуном версию истории последовательности культурных сущностей, или „систем“, диалектику Маркса и Гегеля…»[3]. Одним из непосредственных предшественников Берталанфи является «Тектология» А. А. Богданова[4], не утратившая

теоретической ценности и значимости и в настоящее время. Предпринятая А. А. Богдановым попытка найти и обобщить общеорганизационные законы, проявления

которых прослеживаются на неорганическом, органическом, психическом, социальном, культурном и пр. уровнях, привела его к весьма значительным методологическим обобщениям, открывшим путь к революционным открытиям в области философии, медицины, экономики и социологии. Истоки идей самого Богданова также имеют развитую предысторию, уходящую в труды Г. Спенсера, К. Маркса и других ученых. Идеи Л. фон Берталанфи, как правило, являются дополнительными по отношению к идеям А. А. Богданова (например, если Богданов описывает «дегрессию» как эффект, Берталанфи исследует «механизацию» как процесс).

Непосредственные предшественники и параллельные проекты

Малоизвестным и поныне остаётся факт, что уже в самом начале XX века русский физиологВладимир Бехтерев, совершенно независимо от Александра Богданова, обосновал 23 универсальных закона и распространил их на сферы психических и социальных процессов. Впоследствии ученик академика Павлова Пётр Анохин строит «теорию функциональных систем», близкую по уровню обобщённости к теории Берталанфи[. Нередко в роли одного из основателей теории систем фигурирует основатель холизма Ян Христиан Смэтс. Кроме того, во многих исследованиях по праксеологии и научной организации труда нередко можно встретить указания

на Тадеуша Котарбинского, Алексея Гастева и Платона Керженцева, причисляемых[7] к основоположникам системно-организационного мышления.

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

Для не полностью формализованной ОТС существует пять аксиоматических условий: (1) существование, (2) множество объектов, (3) единое, (4) единство, (5) достаточность. При выборе условия (1) мы исходили из того, что существование является фундаментальной характеристикой системы. В соответствии с диалектическим материализмом существование мы сводим к трем его формам: 1) пространственной — «простиранию»; 2) временной — к «длению — бренности»; 3) динамической — «изменению + сохранению». Из них особенно важна третья форма, т. е. движение.

Условие (2) мы понимается как множество самых различных объектов — материальных и идеальных. Фактически это «мир», каков он есть сам по себе, в его объективном существовании. «Объектом» называется любой предмет как объективной, так и субъективной реальности. Условие (2) приходится принимать во внимание потому, что невозможно построить систему, не имея нужных для этого объектов как своего рода строительных материалов.

Условие (3) — «единое» — представляет собой некоторое одинаковое для всех композиций («объектов-систем») данной системы («системы объектов данного рода») свойство (или признак), логически выступающее основанием классификации. В дальнейшем такие признаки мы будем называть Ai признаками. Необходимость учета условия (3) объясняется тем, что данную i-тую систему приходится строить из объектов лишь множества {Мi(0)}, выделенного по основанию Ai(0) и далее называемого множеством первичных элементов.

Условие (4) — «единство» — понимается двояко: и как такое отношение (в частном случае — взаимодействие) между «первичными» элементами, благодаря которому возникают объекты-системы, обладающие уже и новыми, целостными свойствами — аддитивными, неаддитивными, аддитивно-неаддитив-ными, и как отдельный объект — объект-система. Условие (4) имеет фундаментальное значение для существования систем. Категория единства важна для ОТС, так как благодаря ей конкретизируется проявление основного закона диалектики — закона единства и «борьбы» противоположностей.

Условие (5) — «достаточность» — понимается в том же смысле, какой имеют в виду, когда говорят о необходимости достаточного количества материала и необходимых условий для сооружения какого-либо объекта. Без достаточного количества «первичных» элементов и достаточных оснований построение и существование какой бы то ни было системы невозможны.

ОТС, возникнув в 1968 г., за 20-летний период существования и развития вопреки неоднократно высказывавшимся опасениям получила довольно широкое признание ученых. Ею пользуются исследователи самых различных областей знания, разрабатывая все новые ее приложения в философии, эстетике, медицине, , геологии, минералогии, кристаллографии и математике.

Вданной работе наш вариант ОТС (по сравнению с предыдущим его состоянием) пополнился большим числом новых понятий, категорий, предложений; в ней впервые сформулирован ряд оригинальных учений, о которых шла речь.

Вперспективе—дальнейшая математизация и диалектизация ОТС, детальный анализ механизма основных и производных преобразований объектов-систем; значительное расширение числа системных преобразований посредством экспликации зменений состава не только «первичных» элементов, но и отношений единства и законов композиции систем; создание в рамках ОТС учения об иерархо-неиерархических системах; еще более глубокие философские исследования предпосылок, категорий, законов и учений этой теории. Необходимо с позиций общей теории систем проанализировать и саму философию. По-прежнему фундаментальное значение мы придаем, может быть, самому глубокому для ОТС вопросу о формулировке необходимых и достаточных условий реализации а) основных и производных форм изменения и развития материи; б) структурной симметрии размерностей —0 (точечной), 1 (линейной), 2 (плоской), 3 (пространственной), не специфических для любой формы движения материи.

Сегодня ОТС — это не закончившая свое развитие теория, а «теория на марше»; ее основная цель — дать перечень того, что должно быть, что может быть, чего быть не может у систем,— была и остается актуальной.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]