Какие индексы бывают – Что такое индексы базы данных (для начинающих)? — IM-Cloud.ru

Содержание

Что такое индексы базы данных (для начинающих)? — IM-Cloud.ru

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

 

Что такое индекс базы данных и зачем он нужен?

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

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

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

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

Теперь, представьте себе, что речь идет не об одной полочке, а об огромном помещении, где находятся тысячи книг.

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

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

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

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

Так вот, в данном примере, если переносить это в базу данных:

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

Поиск книги — это sql-запросы получения данных. При этом важно отметить, что сами по себе они не меняются. То есть вам как нужно было найти «Термодинамику», так и осталось нужным найти «Термодинамику». Другое дело, как вы будете это осуществлять — прочесывая тысячи книг или открыв каталог.

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

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

Если суммировать, то можно увидеть, что наличие индекса может быть весьма выгодным. Например, для одной домашней полочки с десятком книг — индекс в общем-то не сильно нужен, а вот когда речь заходит о более больших объемах, то индекс будет весьма полезным.

Так же можно заметить, что добавление индекса не требует того, чтобы сами sql-запросы были переписаны, так как последние являются лишь выражением на упрощенном языке для базы данных. Если продолжить аналогию, то это как попросить кого-то найти вам «Флора и фауна». При этом каким образом и сколько этот кто-то будет искать книгу, будет решать сам этот человек. В данном примере «найти книгу» — это sql-запрос, а этот «кто-то» это база данных.

 

Какие бывают индексы?

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

Немного поясню.

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

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

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

Теперь поясню откуда берется логарифм. Дело в том, что дерево обычно заполняется по определенным правилам. К примеру, если у узла максимально может быть всего два дочерних узла (так называемое бинарное дерево), то обычно левый дочерний узел имеет значение меньше текущего, а правый большее значение. Поэтому если вам нужно найти, например, число 30 в дереве с рисунка чуть выше, то вам понадобится всего 4 сравнения (40 — 25 — 32 — 30). Именно из-за этой особенности поиска и берется логарифм (так как каждое сравнение сокращает количество проверяемых элементов в два раза). При этом обычно значение логарифма округляют в большую сторону.

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

Как видите, чтобы здесь найти запись с ключом «3» понадобится 4 сравнения (40 — 25 — 10 — 3), хотя всего записей 5.

Практически во всех базах данных, существует деление по уникальности:

Уникальный индекс — это такой индекс, у которого все значения встречаются только один раз. Проводя аналогию, когда каждая книга присутствует только в одном экземпляре и никогда названия книг не совпадают.

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

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

Так же стоит знать, что индексы делятся по количеству входящих в них полей:

Обычные индексы — состоят из одного поля. Здесь, вероятно, все понятно. Обычный каталог страничек.

Составные индексы — строятся по нескольким полям, при этом расположение полей является важным.

Чуть подробнее про составные индексы. Рассмотрим аналогию с теми же книгами. До этого индекс строился только по названию. Теперь же представим, что книги с одинаковыми названиями часто встречаются. В такой ситуации, легко может получится, что страничка каталога будет состоять из координат сотен книг (десятки авторов и у каждого по десять копий). Бегать их всех проверять — так же немалое количество времени. Поэтому вместо того, чтобы страничка просто перечисляла все местонахождения книг, можно сделать так, чтобы странички с именами книг указывали на дополнительные каталоги, где аналогичным образом проиндексированы авторы.

Немного упрощая, поиск будет выглядит примерно так.

1. Вначале вы ищите в каталоге с именами необходимую страничку с названием.

2. Затем в этой страничке смотрите, где находится соответствующий каталог с авторами.

3. Берете этот каталог и уже в нем находите страничку, где указано месторасположение всех книг с этим автором и названием.

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

Существуют и другие моменты, но чаще всего достаточно знать хотя бы эти базовые знания.

 

im-cloud.ru

Типы индексов, виды индексов, или какие вообще бывают индексы?

Типы индексов, виды индексов, или какие вообще бывают индексы?

// Август 2nd, 2012 // MySQL, Веб-разработка

После прочтения многочисленной литературы по СУБД, некоторого опыта работы с MongoDB и листанию статей по базам данных у меня созрело желание сделать cheatsheet по индексам применительно к БД. А индексирование — достаточно интересный раздел теории баз данных, а главное — нужный в практике. Вообще-то говоря, золотое правило индексирования — иметь индекс под каждый запрос.

По порядку сортировки

  • Упорядоченные  — индексы, в которых элементы поля(столбца) упорядочены.
    • Возрастающие
    • Убывающие
  • Неупорядоченные — индексы, в которых элементы неупорядочены.

По источнику данных

  • Индексы по представлению (view).
  • Индексы по выражениям — например в PostgreSQL.

По воздействию на источник данных

  • Некластерный индекс — наиболее типичные представители семейства индексов. В отличие от кластерных, они не перестраивают физическую структуру таблицы, а лишь организуют ссылки на соответствующие строки. Для идентификации нужной строки в таблице некластерный индекс организует специальные указатели, включающие в себя: информацию об идентификационном номере файла, в котором хранится строка; идентификационный номер страницы соответствующих данных; номер искомой строки на соответствующей странице; содержимое столбца.
  • Кластерный индекс — Принципиальным отличием кластерного индекса от индексов других типов является то, что при его определении в таблице физическое расположение данных перестраивается в соответствии со структурой индекса. Логическая структура таблицы в этом случае представляет собой скорее словарь, чем индекс. Данные в словаре физически упорядочены, например по алфавиту. Кластерные индексы могут дать существенное увеличение производительности поиска данных даже по сравнению с обычными индексами. Увеличение производительности особенно заметно при работе с последовательными данными.

По структуре

  • B*-деревья
  • B+-деревья
  • B-деревья
  • Хеши.

По количественному составу

  • Простой индекс (индекс с одним ключом) — строится по одному полю.
    Составной (многоключевой, композитный) индекс — строится по нескольким полям. Важен порядок следования полей (например в MongoDB).
    Индекс с включенными столбцами — Некластеризованный индекс, дополнительно содержащий кроме ключевых столбцов еще и неключевые.
  • Главный индекс (индекс по первичному ключу) — это тот индексный ключ, под управлением которого в данный момент находится таблица. Таблица не может быть отсортирована по нескольким индексным ключам одновременно. Хотя, если одна и та же таблица открыта одновременно в нескольких рабочих областях, то у каждой копии таблицы может быть назначен свой главный индекс.

По характеристике содержимого

  • Уникальный индекс
    — состоит из множества уникальных значений поля.
    Плотный индекс (NoSQL) — индекс, при котором, каждом документе в индексируемой коллекции соответствует запись в индексе, даже если в документе нет индексируемого поля.
  • Разреженный индекс (NoSQL) — тот, в котором представлены только те документы, для которых индексируемый ключ имеет какое-то определённое значение (существует).
  • Пространственный индекс — оптимизирован для описания географического местоположения. Представляет из себя многоключевой индекс состоящий из широты и долготы.
  • Составной пространственный индекс — индекс, включающий в себя кроме широты и долготы ещё какие-либо мета-данные (например теги). Но географические координаты должны стоять на первом месте.
  • Полнотекстовый (инвертированный) индекс — словарь, в котором перечислены все слова и указано, в каких местах они встречаются. При наличии такого индекса достаточно осуществить поиск нужных слов в нём и тогда сразу же будет получен список документов, в которых они встречаются.
  • Хэш-индексы — предполагают хранение не самих значений, а их хэшей, благодаря чему уменьшается размер(а, соответственно, и увеличивается скорость их обработки) индексов из больших полей. Таким образом, при запросах с использованием HASH-индексов, сравниваться будут не искомое со значения поля, а хэш от искомого значения с хэшами полей.
    Из-за нелинейнойсти хэш-функций данный индекс нельзя сортировать по значению, что приводит к невозможности использования в сравнениях больше/меньше и «is null». Кроме того, так как хэши не уникальны, то для совпадающих хэшей применяются методы разрешения коллизий.
  • Битовый индекс (bitmap index) — метод битовых индексов заключается в создании отдельных битовых карт (последовательность 0 и 1) для каждого возможного значения столбца, где каждому биту соответствует строка с индексируемым значением, а его значение равное 1 означает, что запись, соответствующая позиции бита содержит индексируемое значение для данного столбца или свойства.
  • Обратный индекс (reverse index) — это тоже B-tree индекс но с реверсированным ключом, используемый в основном для монотонно возрастающих значений(например, автоинкрементный идентификатор) в OLTP системах с целью снятия конкуренции за последний листовой блок индекса, т.к. благодаря переворачиванию значения две соседние записи индекса попадают в разные блоки индекса. Он не может использоваться для диапазонного поиска.
  • Функциональный (function-based) индекс (индекс по вычисляемому полю) — индекс, ключи которого хранят результат пользовательских функций. Функциональные индексы часто строятся для полей, значения которых проходят предварительную обработку перед сравнением в команде SQL. Например, при сравнении строковых данных без учета регистра символов часто используется функция UPPER. Создание функционального индекса с функцией UPPER улучшает эффективность таких сравнений. Кроме того, функциональный индекс может помочь реализовать любой другой отсутствующий тип индексов данной СУБД(кроме, пожалуй, битового индекса, например, Hash для Oracle)
  • Первичный индекс — уникальный индекс по полю первичного ключа.
  • Вторичный индекс — индекс по другим полям (кроме поля первичного ключа).
  • XML-индекс — вырезанное материализованное представление больших двоичных XML-объектов (BLOB) в столбце с типом данных xml.

По механизму обновления

  • Полностью перестраиваемый — при добавлении элемента заново перестраивается весь индекс.
  • Пополняемый (балансируемый) — при добавлении элементов индекс перестраивается частично (например одна из ветви) и периодически балансируется.

По покрытию индексируемого содержимого

  • Полностью покрывающий (полный) индекс — покрывает всё содержимое индексируемого объекта.
  • Частичный (partial) индекс — это индекс, построенный на части таблицы, удовлетворяющей определенному условию самого индекса. Данный индекс создан для уменьшения размера индекса.
  • Инкрементный (Delta) индекс — индексируется малая часть данных(дельта), как правило, по истечении определённого времени. Используется при интенсивной записи. Например, полный индекс перестраивается раз в сутки, а дельта-индекс строится каждый час. По сути это частичный индекс по временной метке.
  • Real-time индекс — особый вид delta индекса в Sphinx, характеризующийся высокой скоростью построения. Предназначен для часто-меняющихся данных.

Индексы в кластерных системах

  • Глобальный индекс — индекс по всему содержимому всех shard’ов (секций).
  • Сегментный индекс — глобальный индекс по полю-сегментируемому ключу (shard key). Используется для быстрого определения сегмента(shard’а), на котором хранятся данные в процессе маршрутизации запроса в кластере БД.
  • Локальный индекс —  индекс по содержимому только одного shard’а.

Если есть неточности, коррективы — пишите в комменты. Надеюсь кому-то будет полезным эта «шпаргалка».

Ссылки

http://ru.wikipedia.org/wiki/Индекс_(базы_данных)
http://habrahabr.ru/post/102785/
http://www.sql.ru/articles/mssql/03013101indexes.shtml#16_3
http://msdn.microsoft.com/ru-ru/library/ms175049(v=sql.90).aspx

Спасибо!


Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:

tokarchuk.ru

Биржевые индексы от А до Я

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

График Dow Jones Industrial Average

Для начала немного истории. Здесь справедливо будет упомянуть создателя первого биржевого индекса, американского журналиста и финансиста – Чарльза Генри Доу. В 1884 году он разработал индекс Dow Jones Transportation Average, в который входили акции основных транспортных компаний Америки. На момент создания в индекс входили акции одиннадцати компаний, в настоящее время в него входят акции двадцати компаний.

Наибольшую популярность получил второй индекс созданный Чарльзом Доу – Dow Jones Industrial Average. В него входят акции тридцати крупнейших промышленных компаний.

Виды биржевых индексов

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

  1. Отраслевые
  2. Композитные

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

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

Кроме этого биржевые индексы можно классифицировать следующим образом:

  1. Индексы, состоящие из элементов, относящихся к разным сегментам рынка ценных бумаг. Например, различают фондовые индексы, построенные на основе акций и на основе облигаций.
  2. По географическому принципу индексы бывают как представляющие экономики отдельных стран (национальные индексы), так и показывающие положение дел на мировом рынке (международные индексы).
  3. По методике расчёта (подробнее об этом поговорим ниже в разделе «Расчёт биржевых индексов»).

Российские биржевые индексы

Среди наших национальных биржевых индексов можно выделить такие основные как:

РТС – относится к индексам Московской биржи. Включает в себя акции крупнейших, динамически развивающихся российских компаний торгующихся на Московской бирже. Индекс РТС вычисляется на основе цен акций выраженных в долларах США.

Индекс голубых фишек – это ещё один индекс, рассчитываемый на Московской бирже. Как уже понятно из названия, он включает в себя акции так называемых голубых фишек российского рынка.

Индекс МосБиржи – ранее он назывался индексом ММВБ, однако после слияния ММВБ и РТС под крылом Московской биржи, он сменил своё название. Состоит из пятидесяти акций компаний представляющих основные сектора российской экономики. Список компаний входящих в индекс пересматривается раз в три месяца.

MSCI Russia – этот индекс рассчитывается международной компанией MSCI inc наряду с индексами для других стран экономика которых классифицируется в данный момент как развивающаяся. В состав индекса MSCI Russia отбираются российские компании на основе их капитализации, количества акций в свободном обращении. Также немаловажным фактором здесь является доступность акций для иностранных инвесторов. Расчёт индекса производится в долларах США, список компаний входящих в индекс пересматривается ежеквартально.

Список компаний входящих в индекс MSCI Russia (по состоянию на июнь 2017)

Мировые биржевые индексы

Наиболее известными во всём мире являются американские фондовые индексы. Именно в США, как уже говорилось выше, появился первый биржевой индекс – индекс Доу-Джонса, существующий и поныне.

Кроме транспортного индекса Dow Jones Transportation Average существуют еще индустриальный (Dow Jones Industrial Average) и коммунальный (Dow Jones Utilities Average) индексы.

Компании входящие в индекс Dow Jones Transportation Average

Dow Jones Industrial Average – рассчитывается на основе цен акций тридцати крупнейших промышленных предприятий США.

Dow Jones Utilities Average – рассчитывается на основе цен акций пятнадцати крупнейших североамериканских коммунальных компаний.

Другие широко известные американские фондовые индексы:

Индекс NASDAQ – рассчитывается на одноименной американской бирже. Имеет два основных вида: NASDAQ Composite и  NASDAQ 100. Индекс NASDAQ Composite включает в себя акции более 3000 компаний торгуемых на этой бирже (это могут быть как американские, так и не американские компании). Индекс NASDAQ 100 включает в себя акции ста компаний нефинансового сектора торгуемых на данной бирже.

Индексы S&P – рассчитываются международным рейтинговым агентством Standard & Poor’s Financial Services LLC. Наиболее известный индекс S&P 500 состоящий из акций индустриальных (400 наименований), коммунальных (40 наименований), финансовых (40 наименований) и транспортных (20 наименований) компаний с суммарной капитализацией более 80% капитализации всех компаний представленных на Нью-Йоркской фондовой бирже. Кроме этого существует индекс S&P 100 состоящий из ста крупнейших компаний, опционные контракты которых представлены на Чикагской опционной бирже.

NYSE Composite – индекс рассчитываемый на Нью-Йоркской фондовой бирже (New York Stock Exchange) на основе акций более 2000 компаний (как американских, так и других крупных международных компаний котируемых на данной бирже) с общей капитализацией свыше двадцати триллионов долларов США.

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

Индекс DAX 30 – крупнейший фондовый индекс Германии, включающий в себя акции тридцати крупнейших компаний котируемых на Франкфуртской бирже.

Индекс CAC 40 – французский фондовый индекс, рассчитываемый на основе цен сорока крупнейших компаний представленных на Парижской фондовой бирже.

Индекс FTSE 100 – британский индекс, созданный аналитическим агентством Financial times на основе акций ста компаний голубых фишек национального фондового рынка.

Индекс Euro Stoxx 50 – создан на основе акций пятидесяти крупнейших компаний расположенных на территории Европейского Союза.

Ну и конечно азиатские фондовые индексы (куда же без них):

Индекс Nikkei 225 – старейший японский фондовый индекс, состоящий из акций двухсот двадцати пяти компаний котируемых на Токийской фондовой бирже.

Индекс TOPIX – ещё один японский биржевой индекс, состоящий из акций компаний входящих в первую секцию Токийской биржи.

Индекс Hang Seng – крупнейший китайский фондовый индекс, строящийся на основе котировок акций тридцати четырёх компаний торгуемых на Гонконгской фондовой бирже (суммарная капитализация этих компаний составляет около 65% от общей капитализации компаний торгуемых на данной бирже).

Расчёт биржевых индексов

Рассчитываются биржевые индексы двумя основными способами:

  1. Как среднее значение цен всех акций входящих в индекс
  2. Как средневзвешенное значение всех цен акций входящих в индекс

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

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

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

Торговля биржевыми индексами

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

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

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

На этом пока всё. Удачных торгов и стабильного профита всем вам!

www.azbukatreydera.ru

Типы индексов

Министерство образования и науки РК

Некоммерческое акционерное общество

Алматинский университет энергетики и связи

Кафедра Инженерной кибернетики

СРО №1

По дисциплине: «Система управления базами данных»

На тему: Индексные файлы

Специальность: 5В070200-Автоматизация и управление

Выполнил: Ешмуханбетов Н.Е.

Группа: АИС-13-1

Проверила: доцент Сауанова К.Т.

«_____»________2015 г.

Алматы, 2015 г

Введение

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

Индексы и их использования

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

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

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

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

На практике для создания индекса для некоторой таблицы БД пользователь указывает поле таблицы , которое требует индексации.

Термин «индекс» тесно связан с понятием «ключ», хотя между ними есть и некоторые отличие.

Если индексирование организовано на основе ключевого поля, то индекс называется первичным. Ключевые поля , как правило, индексируются автоматически.

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

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

1)последовательного доступа к индексированному файлу, т.е. в последовательности, заданной значениями индексного поля.

2)прямого доступа к отдельным записям индексированного файла на основе заданного значения индексного поля.

Для ускорения доступа к данным применяется несколько типов индексов.

Основные из них перечислены ниже.

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

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

Вторичный индекс - это индекс, который определен на поле файла данных, отличном от поля, по которому выполняется упорядочение.

Файл может иметь не больше одного первичного индекса или одного индекса кластеризации, но дополнительно к ним может иметь несколько вторичных индексов. Индекс может быть разреженным (sparse) или плотным (dense). Разреженный индекс содержит индексные записи только для некоторых значений ключа поиска в данном файле, а плотный индекс имеет индексные записи для всех значений ключа поиска в данном файле. Ключ поиска для индекса может состоять из нескольких полей.

Индексно-последовательные файлы

Отсортированный файл данных с первичным индексом называется индексированным последовательным файлом, или индексно-последовательным файлом. Эта структура является компромиссом между файлами с полностью последовательной и полностью произвольной организацией. В таком файле записи могут обрабатываться как последовательно, так и выборочно, с произвольным доступом, осуществляемым на основу поиска по заданному значению ключа с использованием индекса. Индексированный последовательный файл имеет более универсальную структуру, которая обычно включает следующие компоненты:

  • первичная область хранения;

  • отдельный индекс или несколько индексов;

  • область переполнения.

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

Вторичные индексы

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

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

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

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

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

studfiles.net

Что такое фондовые индексы и зачем они нужны / ITI Capital corporate blog / Habr

Каждый хотя бы раз в своей жизни сталкивался с понятием биржевых индексов или, как минимум, слышал о том, что «индексы РТС и ММВБ обновили максимум с апреля». Но что же скрывается за данным понятием, и зачем вообще нужны фондовые индексы? Сегодня мы подробнее рассмотрим этот вопрос.

Что такое индекс

Биржевой индекс — это показатель изменения цен определенной группы ценных бумаг. Можно представить биржевой индекс как «корзину» из акций, объединенных по какому-либо признаку.

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

Зачем нужны индексы

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

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

Сравнение индексов между собой дает понимание как на рынке торгуются разные сектора экономики в сравнении друг с другом.

Немного истории

Первым широко распространенным индексом стал индекс, созданный Чарльзом Доу в 1884 году. Его расчет велся по котировкам 11 самых крупных (и с крупнейшим оборотом акций на бирже) на тот момент транспортных компаний США — индекс так и назывался Dow Jones Transportation Average. В 1896 году появился индекс, который сегодня известен, как Dow Jones Industrial Average, который объединил основные промышленные компании Америки.

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

Другой знаменитый индекс — S&P 500 ведет свою историю от первого индекса Standard & Poor’s, который был представлен в 1923 году. В своем нынешнем виде S&P 500 начал жизнь в марте 1957 года — к тому времени технологии позволяли производить расчет индекса в режиме реального времени.

Классификация индексов

Существует множество фондовых индексов, которые созданы для решения конкретных задач. Эти инструменты классифицируются по различным признакам — по методу расчета (взвешивание компонент), семействам и по автору. Рассмотрим каждый тип индексов по порядку.
Методы расчета индексов

Одним из старейших способов расчета индексов является метод среднего арифметического. Несмотря на то, что первоначально знаменитый промышленный индекс Dow Jones Industrial Average рассчитывался именно как среднее взвешенное цен акций, входящих в его список на определенный момент времени, данный способ не очень эффективен, ввиду того, что число акций, выпускаемых компаниями могут отличаться на порядки — одна компания может выпустить миллион акций, а другая — несколько десятков тысяч. Естественно, это не позволит получить сколько-нибудь репрезентативное значение самого индекса.

Делитель для вычисления среднего афифметического первоначально равнялся 11 — числу входивших в индекс акций. Сейчас для расчёта применяют масштабируемое среднее — сумма цен делится на делитель, который изменяется каждый раз, когда входящие в индекс акции подвергаются дроблению или объединению. Это позволяет даже при изменениях в структуре входящих в индекс акций, сохранить возможность их сопоставления.

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

Минусом же является отсутствие весов. Наибольшее влияние на индекс оказывают самые дорогие акции, а изменение цен самых дешевых почти не отражается на его значении. При этом цена самих акций не влияет напрямую на капитализацию компании — у компании, одна акция которой стоит дорого, капитализация может быть меньше, чем у эмитента более дешевой акций (а доходность самих акций может быть даже ниже). По аналогичной схеме рассчитываются индексы семейства Американской фондовой биржи AMEX, а также японский индекс Nikkei 225 Stock Average (публикуется с 1949 года, объединяет 225 акций).

Существуют и индексы, рассчитываемые по формуле средней арифметической взвешенной от темпов роста цен акций — например, сводный индекс Value Line Composite Aithmetic Index (объединяет 1700 акций с NYSE и AMEX). Цена каждой акции, входящей в индекс, умножается на коэффициент, соответствующий ее доле в акционерном капитале компании, которая ее выпустила (так называемый «вес»).

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

Еще одним методом расчета индексом является средняя геометрическая от темпов роста цен акций — к индексам этого типа относится созданный изданием Financial Times индекс FT 30 и Value Line Composite Geometric Index (также объединяет 1700 акций).

Большинство зарубежных и российских фондовых индексов основаны на формуле индекса стоимости — сюда входят индексы семейств NASDAQ, S&P, DAX (Германия), CAC (Франция), индексы РТС и ММВБ.

Купить фьючерсы на российские индексы можно на Московской бирже. Для этого нужно открыть брокерский счет – сделать это можно в режиме онлайн по этой ссылке.

Семейства индексов

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

Одним из самых популярных индикаторов являются индексы, рассчитываемые рейтинговым агентством Standard & Poor’s (S&P). В их число входит главный индекс S&P 500, объединяющий 500 наиболее капитализированных компаний США (80% торгуются на NYSE, 20% — на AMEX). Своим семейством индексов обладает биржа NASDAQ — эти индикаторы учитывают поведение более 4500 американских и зарубежных компаний. В их число входят сводный индекс NASDAQ Composite (объединяет все компании в листинге биржи), NASDAQ National Market (компании из США), а также масса отраслевых индексов.

В Европе заметным семейством индексов являются индикаторы немецкого фондового рынка (DAX 30, Dax Price Index, DAX 100 Sector Indexes и т.п.), французские CAC, отличающиеся по количеству входящих в них акций (40, 80, 120 и т.п.).

На «Московской бирже» также есть семейство индексов — туда входят основные индикаторы ММВБ и РТС, а также индекс голубых фишек, индексы акций второго эшелона и широкого рынка. Помимо этого биржа рассчитывает отраслевые индексы, а также тематические индикаторы: альтернативный индекс «голубых фишек» ММВБ-10, ММВБ-инновации и региональный индекс.

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

Еще одним способом классификации индексов является распределение по составителям. Индексы могут быть «агентскими», когда их расчетом занимаются специальные агентства (пример — индексы S&P агентства Standard & Poor’s). Второй вариант — биржевые индексы, созданные, собственно, фондовыми площадками. В США это NASDAQ, а в России два основных биржевых индекса рассчитывались биржами ММВБ и РТС, которые теперь объединились в единую «Московскую биржу».

Помимо этого, составителем индексов может быть и брокерская компания. Например, ITinvest рассчитывает собственные индексы, среди которых есть, к примеру, индексы корреляции (фьючерса на индекс РТС и индекса ММВБ, фьючерса на индекс РТС и индекса S&P 500), которые применяются для торговли фьючерсом на индекс РТС, «склеенные» фьючерсы и другие индикаторы.

Что показывают индексы

Список акций, котировки которых используются для построения индекса, формируется по определенным критериям, в зависимости от цели составления конкретного индекса.

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

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

Примеры отраслевых индексов можно хорошо проиллюстрировать семейством Dow Jones, в которое входят:

  • Промышленный индекс DJIA — рассчитывается на основе цен акций 30 крупнейших компаний из ведущих отраслей промышленности США.
  • Транспортный индекс DJTA — охватывает акции 20 крупнейших американских транспортных компаний.
  • Коммунальный индекс DJUA — акции 15 компаний сферы электро и газоснабжения. занимающихся газо- и электроснабжением.

Существует также составной индекс (DJCA — Dow Jones Composite Average) – показатель, основывающийся на значениях трех предыдущих индексов.

Существуют также специализированные биржи для компаний, объединенных по тому или иному признаку. Например, биржа высокотехнологичных компаний NASDAQ в США.

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

Пример регионального индекса — это семейство индексов Morgan Stanley Capital International (знаменитый среди инвесторов MSCI). Страновые индексы MSCI считают по акциям компаний конкретной страны. Существуют и индексы по отдельным рынкам — развитых и формирующихся. Например, MDCI Developed Market Index включает в себя акции компаний из 24 стран, в которых фондовые рынки признаны развитыми, а MSCI Emerging Market Index, соответственно, включает акции компаний 27 стран, которые относят к развивающимся.

Текущие события

В конце прошлой недели во многих деловых СМИ появилась информация о том, что ведущие мировые индексные провайдеры планируют исключить российские компании из собственных индексов. В частности, как сообщали «Ведомости», один из известнейших составителей индексов, компания MSCI, объявила о запуске целого ряда новых индесксов, не включающих Россию. Сделано это для того, чтобы помочь инвесторам избежать вложений в страну, находящуюся под санкциями Евросоюза и США.

Другой крупнейший провайдер — S&P Dow Jones также заявил о том, что проводит консультации на тему возможного исключения российских компаний.

Опрошенные «Ведомостями» эксперты, в основном, считают подобное решение ударом для российской экономики, поскольку в сложившихся условиях инвесторы не будут вкладываться в отечественные компании.

Однако, главный экономист ITinvest Сергей Егишянц убежден, что не все так страшно:

Смысл [подобных санкций] только один — некоторое количество западных инвестиционных фондов вкладывают деньги не в какие-то специально выбранные ими акции, а в некоторый индекс, куда разработчиками загнаны фирмы по определённому признаку (отрасль, география, статус экономики и т.п.) «Покупка» такого индекса означает, по сути, приобретение акций всех входящих в него компаний в той пропорции, которая для них установлена изготовителем индекса. Соответственно, исключение корпораций из него означает, что теперь эти «индексные» фонды больше не покупают акции означенных корпораций, а то и распродают те, что уже были в их владении.

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

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

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


Как пользоваться индексами

В общем и целом существование индексом преследует несколько целей. Их можно использовать для:
  • Получения представления об общей динамике котировок акций определенной группы (компаний, стран, отраслей и т.п.). Часто эти данные используются для совершения спекулятивных сделок.
  • Существуют производные инструменты, в основе которых лежит сам индекс — например, существует фьючерс на индекс РТС. Чаще всего подобные контракты применяются для хеджирования рисков (подробнее в нашем топике о фьючерсах).
  • Получение информации об изменении настроений инвесторов — если индексы растут, значит инвесторы позитивно смотрят на перспективы вложений в определенные акции.
  • Мониторинг индексов на протяжении длительного времени позволяет получить представление об инвестиционном климате в конкретной стране.
  • Часто, помимо собственно значения индекса, публикуется информация о суммарном обороте акций, входящих в него компаний. Изменение этих цифр позволяет судить об общей активности торговцев на рынке при сделках с бумагами определенного типа.

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

На сегодня все! Спасибо за внимание, будем рады ответить на вопросы в комментариях.

P.S. Если вы увидели опечатку или ошибку, напишите личным сообщением, и мы оперативно все исправим.

Другие материалы по теме финансов и фондового рынка от ITI Capital:

habr.com

Индексы и их использование в статистике

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

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

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

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

Индексы, их общая характеристика и сфера применения

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

Индексы широко применяются в экономических разработках государственной и ведомственной статистики. Так, в кратком статистическом сборнике «Российская Федерация в цифрах. 1992» содержатся материалы, полученные на основе индексного метода.

Основой индексного метода при определении изменений в производстве и обращении товаров является переход от натурально-вещественной формы выражения товарных масс к стоимостным (денежным) измерителям. Именно посредством денежного выражения стоимости отдельных товаров устраняется их несравнимость как потребительных стоимостей и достигается единство

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

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

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

Статистический индекс — это относительная величина сравнения сложных совокупностей и отдельных их единиц. При этом под сложной понимается такая статистическая совокупность, отдельные элементы которой непосредственно не подлежат суммированию.

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

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

Аналитический подход рассматривает индекс как показатель изменения уровня результативной величины, на которую оказывает влияние величина, изучаемая с помощью индекса. Отсюда и иная задача, которая решается с помощью индексных показателей: выделить влияние одного из факторов в изменении многофакторного показателя.

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

По степени охвата элементов явления индексы делят на индивидуальные и общие (сводные).

Индивидуальные индексы (i) - это индексы, которые характеризуют изменение только одного элемента совокупности.

Показатели, характеризующие изменение более или менее однородных объектов, входящих в состав сложного явления, называются индивидуальными индексами – ix.

p – цена

q – количество

t – время

T – численность

f – з/п

F – фонд з/п

S – посевная площадь

y – урожайность

z – себестоимость

Индекс получает название по названию индексируемой величины.

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

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

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

Способ построения http://hi-edu.ru/e-books/xbook096/01/predmetnyi.htm - i786 агрегатных индексов заключается в том, что при помощи так называемых соизмерителей можно выразить итоговые величины сложной совокупности в отчетном и базисном периодах, а затем первую сопоставить со второй.

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

Индексом переменного состава называют отношение двух средних уровней.

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

В зависимости от характера и содержания индексируемых величин различают индексы количественных (объемных) показателей и http://hi-edu.ru/e-books/xbook096/01/predmetnyi.htm - i796 индексы качественных показателей.

studfiles.net

Для чего НЕ нужны индексы

Индекс лишним не бывает? Чем больше индексов тем лучше? А не проиндексировать ли это измерение на всякий случай?
Если подобные вопросы иногда возникают в вашей голове, то эту статью прочитать было бы весьма полезно.

Итак, традиционное мнение что "Индекс это хорошо, а блокировка это плохо". Часто бывает неверным до противоположности.
Вот эта картинка, которую я выбрал для заголовка статьи, очень часто напоминает многие базы 1С, которые неожиданно начинают "быстро рости"
и "тормозить".

Но прежде чем перейти к сути, придётся немного покопаться в теории.

Что такое индексы, для чего они нужны, какие они бывают?

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

Итак, как работает индекс? Наверное все в детстве играли в игру "угадай число"? Кто-то загадал число от 1 до 50 а вам его нужно угадать за наименьшее число вопросов.
Как вы будуте его угадывать? Перебором: "Это 1? Это 2? Это 3?". Скорее всего вы будете задавать вопросы вида: "Оно больше 25?". И только когда вариантов останется около 2-3 вы будете перебирать возможные.
Т.е. поступите примерно как показано на картинке:

В ВУЗ-е мы уже узнаём что подобные структуры называются графами, вернее даже разновидностью графа - деревьями. Бывают ещё более вырожденные разновидности деревьев, так называемые B-деревья.
Собственно, они и лежат в основе большей части индексов.

Хотя конечно не большей. Индексы делятся на два типа: кластерные и не кластерные.
Конечно можно вспомнить что есть битовые индексы, функциональные индексы, XML индексы.
Но принципиальным отличаем будем считать физическую организацию и принцип работы.

Кластерный индекс - это по сути дела не индекс, а определенным образом организованная таблица. В Oracle его, к примеру, вообще называют Index Organized Table или IOT.

Некластерный индекс - это отдельная структура, как правило вида B-дерева, которая создаётся дополнительно к основной таблице.

Если вы сейчас думаете что эти два вида индексов придумали ИТ специалисты, то вы сильно ошибаетесь.

Вот так выглядит кластерный индекс, который появился ещё до появления компьютера:


А как то вот так, соответственно некластерный:

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

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

Теперь давайте посмотрим уже более детально, применительно к MS SQL Server:

В MS SQL существуют 2 физических операции Index Seek и Index Scan. Index Seek - это хорошо, Index Scan - плохо.
Index seek означает просмотр индекса в порядке упорядочевания, либо по B-Дереву, Index Scan - обычная операция просмотра всех
записей таблицы, аналогичная всем известной Table Scan. Чаще всего данная операция присутствует в случае "неполного покрытия" индекса,
Если в индексе, к примеру, есть поле "Контрагент, Номенклатура" а отобрать записи надо по "контрагенту, номенклатуре и заказу покупателя".
В этом случае в плане запроса MS SQL можно будет увидеть что-то вида:

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

А если мы сделаем у таблицы не кластерный индекс, то в итоге увидим примерно следующую картину:

Тут есть ещё одна интересная операция - RID Lookup, занимающая целых 50% времени - столько же, сколько поиск по индексу.

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

Но в данном случае есть ещё одна специфика - это слово "Heap" указанное в скобках операции. Но о нём далее.

Чем плохи индексы?

1) Накладные затраты при записи данных

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

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

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

2) Накладные затраты на обслуживание индексов

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

3) Влияние индексов на размер базы
   Не самое страшное последствие, но так или иначе если база весьит 150-200 ГБ, то об этом надо уже задуматься. Для средней OLTP базы размер индексов как правило превышает объём самой базы.
Не верите? Вполне можете воспользоваться какой-либо обработкой вроде этой: http://infostart.ru/public/19463/ и посмотреть сколько же в вашей базе места занимают индексы.

4) Затраты на создание и поддержание актуальной статистики
Статистику в базе нужно регулярно обновлять при интенсивных операциях вставки и обновления. Это занимает вычислительные ресурсы, хоть и не влияет непосредственно на процесс.
Неактуальная статистика может привести к проблемам производительности системы.

Но это не значит, что индексы - это плохо, без них СУБД были бы бесполезны. Плохи индексы, которые не используются.

Как оптимизатор выбирает какое индекс ему использовать? (статистика, плотность, селективность, кардинальность)

   Итак, про то что "статистика должна быть" и "её нужно обновлять" слышали наверное все.
Многие длаже знают что нужно обновлять статистику наизусть помнят запрос:

EXEC sp_MSForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN;'

Главное не забыть, что хитрый MS SQL кэширует планы запроса, котьорые он уже раз посчитал. Даже если статистика изменится,
для того чтобы что-то заработало по-другому надо бы выполнить:

DBCC FREEPROCCACHE

Но гораздо реже люди заморачиваются с тем чтобы посмотреть статистику БД. Давайте попробуем это сделать на тестовой таблице:

Сделаем в БД простейшую таблицу сделующего вида:

Потом выполним:

DBCC SHOW_STATISTICS('TAB', NAME)

Оказывается сколько всего сохраняется для такой маленькой таблицы. Интересен, ещё тот факт что вы же не выполняли никакого кода по созданию статистики.
Если статистика для таблицы не отключена, то она создаётся сама. И это тоже ложится на накладные расходы.

Сейчас нам интересен в этой таблице столбец Density - Плотность записей. Плотность рассчитывается как

Плотность = Число дубликатов в колонке / Общее число записей в таблице

И является одним из самых выжных статистических показателей данных в таблице. Очевидно, что чем меньше плотность записей, тем эффективнее можно будет воспользоваться индексом.
А при плотности 0.5 как в приведённом примере, индекс в принципе вообще не нужен. Чем ниже в таблице значение Density, тем более правильно спроектирована данная таблица.
Для СУБД лучше всего таблицы с уникальными записями. Обратите внимание на столбец All density - его значение уже 0.25. Это означает что в таблице есть ещ одна колонка. Для MS SQL
этот показатель важен когда вы пишите "СГРУППИРОВАТЬ ПО".

Но плотности записей оптимизатору недостаточно. Основная задача оптимизатора - "догадаться" сколько строк вернёт запрос.
Допустим у нас в базе куча складов по всем регионам - небольшие торговые точки + виртуальные склады. И есть один центральный склад.
Плотность по складу будет достаточно неплохая. Но вот число строк по центральному складу которое вернёт запрос и по региональному будет различаться в тысячи раз.

Для этого есть показатель селективности:

Селективность=число строк удовлетворяющих предикату/всего строк в таблице

предикат - определенное условие.
Из картинки выше селективность определяется в третьей таблице. Там указан "ключ" - RANDE_HI_KEY и соответственно количество строк ему соответствующее... и количество значений ему соответствующее в таблице.

Ну и остался последний показатель статистики:

Кардинальность - это и есть предположительное число строк которое вернёт запрос

В каждом элементе плана запроса этот показатель присутствует.
Если навести на элемент плана запроса курсор, то его можно увидеть во всплывающей подсказке примерно так:

Итак, если итоговый запрос возвращает половину таблицы или около того, то индекс тут совсем не нужен.
Вспомним УТ 10.2, 10.1, даже 10.3 по-моему... В каждом документе был индекс по полю "Организация". В последних версиях его нет. Как думаете почему?

Индекс также бесполезен, если оптимизатор MS SQL решает что итоговый запрос вернёт половину таблицы или вроде того.
Почему MS SQL так может решить вроде разобрались.

Теперь самое время разобраться какие индексы есть в 1С:

Всё просто. Все объекты 1С делятся на ссылочные (у которых есть ссылка и, соответственно, GUID) и табличные (регистры).
У всех таблиц 1С есть кластерный индекс.
У ссылочных кластерный индекс создаётся по ссылке (GUID) - это самая быстрая выборка которая только может быть.
У табличных кластерный индекс создаётся по всем изменениям. Что тоже предельно логично. И конечно этот индекс уникальный.

А как же затраты на запись? Зачем создавать кластерный индекс везде?
Дело тут в том, что так работает MS SQL. В стандартной таблице просто должен быть кластерный индекс.
Без него выборка из этой таблицы будет приводить к тому что операция поиска записи по индексу (как было на картинке выше) будет занимать непростительно много времени.
В MS SQL таблицы без кластерного индекса называеют Heap Table - куча. Что примерно соответствует их физической организации.
Тем не менее такие таблицы могут быть важны. Если у вас 99% операций в этой таблице - запись, а для анализа этих данных вы, к примеру, применяете отдельное OLAP решение.
Поэтому возможность убирать кластерные индексы из таблиц очень бы не помешала разработчикам 1С.

Когда вы ставите у какого либо реквизита, ресурса или измерения объекта 1С признак "индексировать" - создаётся дополнительный или обновляется существующий не кластерный индекс для этой таблице.

Включая реквизиты объекта в критерий отбора, вы так же создаёте по ним отдельный индекс.

Это лишь общие правила по которым платформа создаёт индексы на уровне СУБД. В каких то деталях они могут отличаться, тем более в разных версиях платформы.

К счастью, 1С не пожадничали и дали нам инструмент чтобы структуру БД просматривать - я про фукнкцию "ПолучитьСтруктуруХранения()".
Умельцы этой функцией воспользовались и сделали для неё неплохой интерфейс, которым можно вопспользоваться чтобы точно посмотреть какие же есть индексы у таблицы:

http://infostart.ru/public/147147/

Зачем я всё это прочитал?

Что делать простому разработчику 1С?

   Простой разработчик в отличае от оптимизатора MS SQL может заранее предсказать какие будут данные в запросе, какие будут предикаты и какие нужны индексы.
Что же нужно делать чтобы ваши запросы выполнялись быстро и при этом при записи данных в БД это не приводило к перезаписи нескольких десятков бесполезных индексов.

1) Делайте индексы, покрывающие предикаты, если данный запрос планируется к использованию достаточно часто.
    Но не забудьте что уже существуют кластерные индексы.

2) Если находится индекс уже покрывающий предикат в запросе не создавайте нового индекса.

3) Если индекс покрывает почти всё условие запроса - оцените число записей которое придётся перебрать СУБД при
    данной выборке, если оно невелико (менее нескольких тысяч) - не создавайте нового индекса

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

5) Когда пишите запрос, думайте о том как его будет анализировать оптимизатор, сможет ли он корректно посчитать ориентировочное число строк возвращаемое каждой частью запроса.

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

comol.livejournal.com

Отправить ответ

avatar
  Подписаться  
Уведомление о