Для чего нужны индексы
Почтовый индекс и как его узнать
Здравствуйте, уважаемые читатели блога KtoNaNovenkogo.ru. За последние десятилетия традиционная почта заметно потеряла актуальность. Однако пользоваться ее услугами не перестали.
А с ростом популярности интернет-магазинов эта сфера начала немного возрождаться. Сегодня правила отправки не изменились.
Чтобы посылка или письмо как можно скорее дошли до места назначения, вместе с адресом обязательно нужно указать индекс. Разберемся, что это такое и почему он так важен. Также рассмотрим самые простые способы узнать индекс по адресу.
Почтовый индекс — это.
Индекс – это последовательность цифр, своеобразный код, который обычно пишут на конверте. Его указывают вместе с адресом для того, чтобы ускорить доставку.
Цифры обозначают номер почтового отделения, куда должно отправиться письмо или посылка. В странах Европы индекс содержит еще и буквы.
В России индексная система была разработана и запущена еще в 1970 году. Тогда каждому филиалу почты были присвоены номера, которые до сегодняшнего дня считаются действительными и внесены в единый международный реестр.
Почтовые индексы России содержат 6 цифр. Первые три обозначают регион, край, область или крупный город. Последние три – указывают на почтовое отделение, находящееся на этой территории.
Например, индекс Владивостока – 690000. Но чтобы сотрудники почты быстрее нашли адрес получателя (улицу, дом), им нужен более точный индекс, содержащий номер отделения, обслуживающего данный район города.
Помимо отправки корреспонденции, индекс может понадобиться в том случае, когда нужно пройти регистрацию в онлайн-сервисах.
И здесь у многих возникают проблемы. А все из-за того, что в некоторых странах порядок написания этого кода различается:
В сортировочных пунктах индекс считывается с помощью сканера и тут же отправляется в нужный регион. Поэтому очень важно не допустить ошибку при его написании. Есть несколько способов, как узнать почтовый индекс.
Как узнать индекс по адресу
Если вы находитесь в отделении почты, то можете обратиться к ее сотрудникам – они обязаны помочь.
Также можно позвонить на горячую линию Почты России 8-800-200-58-88 или 8-800-1-000-000. Оператору нужно будет сообщить город, улицу и номер дома.
Но есть и другие варианты. Например, зайти на любой сайт, содержащий базу индексов, ввести нужный адрес в поле поиска. То же самое можно проделать с помощью мобильного приложения. Разновидностей их много, выбирайте по своему усмотрению.
Подойдет и официальное — «Почта России». Этот способ быстрый и удобный, особенно во время путешествия.
Обратите внимание, что даже на одной улице соседние дома могут быть с разными индексами. Это связано с тем, что они обслуживаются разными отделениями.
Все индексы России можно посмотреть на этом ресурсе. Здесь есть возможность искать индекс по адресу и наоборот.
Для глобального поиска по всему миру понадобится расширенная база.
Также все желающие могут скачать официальный эталонный справочник, в котором собраны все существующие индексы.
Но для тех, кто ценит свое время, есть еще более быстрый и простой способ.
Вводим непосредственно в поле поисковика слово «индекс» и далее нужный регион. Например, «индекс рязанская область».
Поиск индекса будет происходить еще быстрее, если воспользоваться услугами голосового помощника – гугл ассистента или др.
Особенности написания индекса
Когда возникает необходимость заполнить адрес на конверте, нужно помнить несколько правил.
Во-первых, почтовый индекс получателя указывается не только в адресе, но и в специальном поле, которое называется кодовый штамп.
Цифры в нем должны быть записаны строго по образцу.
Во-вторых, записывать его нужно только черным или синим цветом. В противном случае сканер не сможет его считать.
Заключение
Итак, индекс, это своего рода код местоположения. Он присваивается каждому населенному пункту не только в России, но и по всему миру.
Зная правильный индекс, почта намного быстрее доставит корреспонденцию, посылки и бандероли.
Эта простая система – яркий пример того, что некоторые изобретения, несмотря на свою давность, еще долго будут служить человечеству.
Удачи вам! До скорых встреч на страницах блога KtoNaNovenkogo.ru
Эта статья относится к рубрикам:
Комментарии и отзывы (2)
Я не заморачиваюсь, а вбиваю нужный адрес в поисковик и мне мгновенно выдает почтовый индекс. И не только по России, а в любой стране мира.
Я например в Америке одно время жил, там делал точно так же. Ну что могу сказать, покупки однозначно доходят и ни разу сбоев не было — значит работает верно. Адрес указать корректно — это главное)) А то было, что вместо Сабал Пальм роад указал Сабал Пальм 2 роад, бедный почтальон меня половину дня искал))
Если необходимо узнать почтовый индекс для получения международной посылки, например, с Алиэкспресс, лучше выяснить не просто код для своего города, но и номер конкретного почтового отделения, в которое нужно доставить пакет.
Иначе можно столкнуться с ситуацией, когда перевозчик выберет отделение на свое усмотрение, и придется ехать на другой конец города для получения.
Почему важен почтовый индекс, зачем он нужен?
Когда отправляем письмо или посылку, мы просто пишем адрес получателя со знанием дела, и вся информация, которую мы предоставляем, кажется настолько логичной, что мы даже не задаем себе вопрос, почему каждая часть из них так важна. Почтовый индекс — это цифро, обозначающее область, в которой находится адрес, что упрощает сортировку почты. Если вы отправляете письмо, почтовый индекс поможет ему добраться до нужного места. Но что будет, если ввели неправильный почтовый индекс? Почтальон всё-таки доставит письмо?
Когда впервые появились почтовые индексы?
Почтовые индексы были впервые введены в крупных городах, примерно в 1860 году во время демографического взрыва. Его целью было облегчение сложности почтовой доставки. К Первой мировой войне большинство крупных европейских городов имели почтовые округа или нумерации районов. Примерно в 1930 году небольшие города и даже сельские районы начали делиться на эти почтовые округа или нумерации районов. С этого момента система почтовых индексов развивалась.
Современные почтовые индексы, которые мы знаем сегодня, впервые были использованы в Украинской Советской Социалистической Республике в 1932 году. За ними последовали Германия в 1941 году, Сингапур в 1950 году, Аргентина в 1958 году, США в 1963 году и так далее.
Почему почтовые индексы так важны?
Безразлично что вы отправляете, вы должны указать точный адрес доставки, чтобы избежать опозданий или доставки по ошибке. Все адреса отсортированы машиной, это означает, что правильный почтовый индекс позволит аппарату правильно разместить вашу посылку для доставки. Если вы введете неправильный почтовый индекс, ваше отправление будет автоматически отсортировано по другому району или городу. Поскольку национальные почтовые службы и другие поставщики курьерских услуг доставляют миллионы штук отправлений в день, правильный почтовый индекс очень важен.
Что произойдет, если вы ввели неправильный почтовый индекс?
Некоторые страны используют почтовые индексы, состоящие только из цифр, в то время как другие используют цифры и буквы, иногда включая пробелы или знаки пунктуации. Поэтому очень важно, чтобы знали точный почтовый индекс и его написание. Это означает, что необходимо проверить, наличие пробелов, дефисов …, поскольку одна маленькая ошибка может вызвать некоторые проблемы.
Когда заказ был онлайн принят для доставки курьерской компанией, ваш заказ с неправильным почтовым индексом может принят системой, но позже он будет отклонен, так как индекс неопознанным. Это приведет к задержке в вывозе курьера, так как сначала вы должны предоставить правильный адрес доставки агенту поддержки клиентов, который будет отправлять ваш заказ еще раз. Некоторые онлайн-системы могут предложить правильные почтовые индексы или сообщить, что ваш почтовый индекс неверный или недействительный.
Если отправлять письмо по почте, вбрасывая его в почтовый ящик, где никто не проверяет, правильный ли адрес, письмо может будет доставлено, если вам повезет, но скорее всего, такие письма доставляются не по тому адресу или вообще не доставляются. Отслеживайте свои посылки в любое время, чтобы избежать неправильной доставки. Написать свой адрес на обратной стороне или слева вверху на лицевой стороне, таким образом, у вас больше шансов получить письмо или посылку, если возникают какие-либо проблемы с адресом доставки.
Почтовый индекс — как его узнать и зачем он нужен
Отправляя письмо или посылку, человек автоматически вписывает нужную информацию об адресате не задумываясь о важности каждой ее части. Особую роль в адресе получателя играет почтовый индекс состоящий из нескольких цифр, которые относятся к той области или региону, где находится адрес. Эти данные делают значительно проще процесс сортировки почты. Почтовый индекс помогает посылке или письму прийти точно в указанное место. Но что будет если указать не верный индекс? Сможет ли почтальон доставить письмо адресату?
Первое появление почтовых индексов
Первые цифровые и буквенные индексы ввели для крупных городов в 1860 году. Они должны были сделать почтовую доставку легче. До того как началась Первая мировая война, у большой части крупных европейских городов были свои почтовые округа или номера обозначающие район. Приблизительно в 1930 году все города, а также сельские районы начали делить на почтовые участки. Именно тогда началось развитие системы и возникли почтовые индексы.
Почтовый индекс в том виде, в каком он сейчас, впервые применили в 1932 году в Украинской Советской Социалистической Республике. Далее они появились в: Германии (1941 г.), Сингапуре (1950 г.), Аргентине (1958 г.), США (1963 г.) и других странах.
Важная роль почтового индекса
Неважно, что отправляется адресату посылка или письмо, отправитель должен указать точный адрес того, кому делается отправка. Это нужно для того, чтобы не было задержки при доставке или отправленное не пришло на другой адрес. Каждый адрес сортируется по индексу, и если он указан правильно, то специальная машина точно распределит посылки и письма. При написании неправильного почтового индекса, отправляемое сортируется на другой район или город и не дойдет до адресата. Так как почтовая и другие курьерские службы загружены миллионами заявок в день на доставку отправлений, то указание точного почтового индекса играет очень важную роль.
Что будет, если ввести неверный почтовый индекс?
В некоторых странах применяют почтовый индекс состоящий только из цифр. Но есть такие страны в которых для его обозначения вместе с цифрами применяют и буквы, и даже пробелы или знаки препинания. Именно поэтому необходимо правильно указывать каждый знак почтового индекса. Иначе, из-за одной маленькой ошибки, посылка не дойдет до нужного адресата или дойдет, но с большой задержкой.
Поступивший в курьерскую компанию онлайн-заказ на доставку с неверно указанным адресом система может принять, но позднее его отклонят, как заказ с не идентифицированным индексом. Это приведет к задержке доставки курьером, так как ему должен быть предоставлен точный адрес получателя. В этом случае письмо или посылку вернут отправителю, который должен будет устранить ошибки в адресе, что позволит курьерской службе повторно отправить заказ.
Существуют онлайн-системы, которые предлагают действительный почтовый индекс того или иного региона, также они сообщают о неверном или недействительном почтовом индексе.
В том случае, когда письмо отправляется по почте через почтовый ящик, его могут не проверить на правильность указанного индекса. Тогда в лучшем случае оно вернется отправителю по указанному обратному адресу на конверте. Но очень часто их доставляют на неправильный адрес или они бесследно пропадают.
Чтобы избежать неприятностей с доставкой, важно отслеживать путь отправленной посылки. Это можно сделать на специальном онлайн-сервисе по интернету. На посылке или письме обязательно нужно писать обратный адрес, чтобы при возникновении проблем с точным адресом получателя, отправитель мог получить их обратно.
Фондовые индексы: что вы должны о них знать
Сегодня стать инвестором просто как никогда, в мобильном приложении можно купить акции «Яндекса» или Apple за несколько секунд. Но что если я вам скажу: так же просто, в пару кликов, вы можете стать портфельным инвестором и вложить свои деньги, например, в 50 самых крупных азиатских корпораций.
Или же 100 быстрорастущих компаний развивающихся стран? И для этого вам не понадобятся миллионы на счету.
Я не аффилирован ни с одним биржевым брокером. Я не заработаю ни рубля, если вы захотите вложить деньги в акции того или иного фонда. Эта статья написана по просьбе подписчиков моего Telegram-канала «Инвестиции на диване».
Александру Жарову, главе Роскомнадзора (кстати, его на днях уволили с этой должности), дали поручение посмотреть, что происходит на рынке услуг связи в стране и отчитаться о полученных результатах. Но как быть Александру, если, например, Мегафон стагнирует, а МТС закупает новое оборудование и расширяет клиентскую базу? Это хорошо или плохо? Рынку от этого каково?
Александр быстро смекнул, в чём соль, и решил составить свой фондовый индекс.
После составления индекса Александру осталось выполнить всего лишь ряд несложных действий.
1. Суммировать стоимость всех акций исследуемых компаний на рынке в 2018 г.:
Получилось 10 акций по 285 рублей от МТС, 3 акции по 180 в общую копилку от Билайна, и ещё 10 штук по 135 от Мегафона. Всего акций на 4740 рублей.
2. Посчитать, сколько денег приходится на одну компанию:
Теперь 4740 рублей он разделил на 3. Получилось 1580 рублей – именно столько приходится в среднем на одну компанию.
3. Проделать всё то же самое для 2019 года:
Получилось 3890 рублей всего в виде ценных бумаг. По 1300 на компанию соответственно.
Итоги исследования показали: если в 2018 году на одну компанию приходилось 1580 рублей ценных бумаг, то в 2019 году – 1300 рублей. То есть каждая компания потеряла в среднем 280 рублей капитализации.
Недовольный Александр пошла сдавать отчёт о том, что в отрасли всё плохо – полноценный кризис.
Если посмотреть внимательнее, то можно прикинуть, что Мегафон обеднел всего-то на 100 рублей, а статистика приписывает ему потерь на 280.
То есть индексы – это инструмент изменения средних значений, не имеющий зачастую ничего общего с ситуацией в конкретной компании.
Опытный наблюдатель мог сразу заметить неладное. А что если компания, даже будучи лидером рынка, выпускает совсем немного акций – такая у неё политика. Тогда её вес в общем индексном фонде будет совсем небольшим, и учесть её влияние на рынок окажется невозможным. Как быть в таком случае?
Для этого существуют разные способы измерения индекса: есть индекс, который высчитывают по геометрическому среднему от темпов роста акций – тогда количество самих ценных бумаг не имеет значения, важна только цена. Иногда используют не геометрическое среднее, а арифметическое.
Звучит сложно, но главная мысль проста. Все способы имеют свои плюсы и минусы – универсалий здесь нет. Главное помнить, что индекс – это всегда про что-то среднее, общее для всех компаний.
Это хорошо, что Александр додумался измерять состояние рынка услуг связи на примере мобильных компаний. Но что будет, если добавить к этому списку «Роснефть»? Тогда мы получим странную смесь компаний, по которой можно отслеживать положение дел в стране со связью и топливом.
Пойдём дальше, и добавим к этому списку ещё 10-20 крупнейших российских компаний. Теперь по этому индексу мы можем следить не только за услугами связи, но за всей экономикой страны в целом.
В общем случае индексы нужны как инструмент наблюдения за экономикой и тенденциями в ней. Кому это может быть полезно?
Предпринимателям. Предпринимателям тоже важно поглядывать за тем, что происходит в экономике. Так, если вы производите колёса для машин, а индексы продаж резины очень круто пошли на спад – время затягивать пояса и готовиться к проблемам.
Один из наиболее известных индексов – S&P500. Туда входят 500 крупнейших американских компаний – по нему можно оценивать состояние как американской, так и мировой (Америка правит бал на мировой арене) экономики.
Допустим, вы посмотрели на показатели индекса и решили, что вам непременно нужно купить акции компаний, входящих в него. Вас поджидают три проблемы.
Акция компании Apple, входящей в S&P500, на момент написания статьи стоит 230$. Это около 18 000 рублей. Согласитесь, дорогое удовольствие для начинающего инвестора. А если учесть, что в индекс входят и компании Facebook, Amazon, Microsoft, акции которых не сильно дешевле – проблема налицо. Самостоятельно повторить индекс обойдётся в несколько сотен тысяч рублей.
Таким образом, приобретая ценные бумаги «Мудрого инвестора» вы становитесь обладателем частички каждой акции из индексного набора. Естественно, что бумаги стоят гораздо дешевле, чем у Apple. Более того, «Мудрый инвестор» заботливо будет ребалансировать свой портфель инвестиций, избавляя вас от лишней головной боли
На этом он не остановился и 12 лет спустя, в 1896 году, создал второй индекс – Dow Jones Industrial Average, в который вошли крупнейшие индустриальные предприятия Америки того времени.
Всё изменилось в середине 20го века, когда технологии впервые позволили создать крупный индекс. Компания Dow Jones Indices основала S&P500 в 1923 году, но в привычной нам форме он существует лишь с конца 60-ых годов.
Все индексы из данного раздела, несмотря на свой «почтенный возраст» всё ещё функционируют и, более того, являются популярными среди инвесторов.
Здесь мы разберем самые популярные индексы с точки зрения обычного российского инвестора.
Ценные бумаги. В индекс входят крупнейшие компании американского рынка. Среди них – Amazon, Apple, Facebook и прочие гиганты современной экономики.
Владелец. S&P Dow Jones Indices.
Ценные бумаги. Индекс включает в себя все крупнейшие компании-лидеры различных секторов американской экономики за исключением транспорта и сферы услуг. Так, в индекс входят компании Boeing, McDonalds, UnitedHealth Group. Многие из компаний данного индекса также входят в S&P500.
Владелец. S&P Dow Jones Indices.
Ценные бумаги. Индекс составляется на основании данных 100 крупнейших мировых компаний. Как правило, эти компании принадлежат к технологическому сектору. Большинство – американские. Главное условие – ценные бумаги компании должны продаваться на бирже NASDAQ. Иначе – в независимости от того, насколько компания крупная – её не включат в индекс.
Страна. Международный индекс.
Владелец. Биржа NASDAQ.
Ценные бумаги. В набор бумаг индекса входят крупнейшие компании, чьи акции торгуются на Лондонской бирже. Среди них – Royal Dutch Shell, HSBC, BP. Всего 101 компания.
Страна. Международный индекс.
Владелец. Связанная с Лондонской биржей FTSE-Group.
Ценные бумаги. Индекс включает в себя все самые крупные компании российского рынка. По нему можно отслеживать положение дел в национальной экономике. Наибольшую долю в индексе имеют Сбербанк, Газпром, Лукойл.
Владелец. Московская биржа.
Ценные бумаги. Данный индекс составлен из ценных бумаг облигаций федерального займа (ОФЗ). В него входят 17 наименований.
Владелец. Московская биржа.
Ценные бумаги. Фонд составлен из акций крупнейших китайских компаний, торгующихся на Шанхайской и Шэньчжэнской биржах. Среди 300 выбранных компаний – Kweichow Moutai, China Merchants Bank.
Владелец. Шанхайская и Шэньчжэнская биржи.
Ценные бумаги. Этот международный индекс включает в себя крупнейшие мировые компании из многих развитых и развивающихся стран. В его составе – 2400 компаний, около половины которых из США.
Страна. Международный индекс.
Ценные бумаги. Индекс высчитывается на основе капитализации крупнейших российских компаний.
Если индекс РТС кажется вам похожим на индекс Московской Биржи, то вам не кажется. Раньше в стране было две равноправных главенствующих биржи – РТС и ММВБ. В 2011 году они объединились, а их индексы остались.
Владелец. Московская биржа.
Для тех, кто, вдохновившись, решил инвестировать в индексы, представляю следующее поэтапное руководство.
Определитесь с целями своего инвестирования, сроками, степенью риска, на которую вы согласны и, ознакомившись с информацией в интернете, выберите себе один или несколько индексов, в которые вы бы хотели инвестировать.
Теперь, когда вы выбрали индекс, найдите брокера, который будет вам наиболее удобен. Ознакомьтесь с тонкостями налогового учёта, выберите биржу, на которую вам нужен доступ для покупки ценных бумаг. Если потребуется, откройте счета на иностранной бирже.
Теперь следуйте всем классическим инвестиционным правилам. Ребалансируйте свой портфель в соответствии с положением дел в мире и в вашем кошельке, следуйте своему инвестиционному плану и, пожалуйста, не проверяйте свои бумаги каждый день. А ещё постарайтесь не заниматься спекуляциями даже тогда, когда, казалось бы, сам бог велел. Следуйте своему плану и не отклоняйтесь.
Если вам интересно развиваться в теме инвестиций — подписывайтесь на мой Telegram-канал «Инвестиции на диване». В нем я регулярно публикую полезные материалы по теме создания личного капитала и работы с фондовыми рынками.
Ну что я могу сказать, как эксперт? Пару недель назад была статья с такой же картинкой, только все квадратики были не зеленые, а красные.
Сколько стоит ваш курс по инвестициям?
Таким образом, вместо владения долей конкретной компании, вы владеете долей в портфеле, в котором лежат бумаги многих компаний сразу на очень большую сумму.
14 вопросов об индексах в SQL Server, которые вы стеснялись задать
Индексы — это первое, что необходимо хорошо понимать в работе SQL Server, но странным образом базовые вопросы не слишком часто задаются на форумах и получают не так уж много ответов.
Роб Шелдон отвечает на эти, вызывающие смущение в профессиональных кругах, вопросы об индексах в SQL Server: одни из них мы просто стесняемся задать, а прежде чем задать другие сначала подумаем дважды.
index | индекс |
heap | куча |
table | таблица |
view | представление |
B-tree | сбалансированное дерево |
clustered index | кластеризованный индекс |
nonclustered index | некластеризованный индекс |
composite index | составной индекс |
covering index | покрывающий индекс |
primary key constraint | ограничение на первичный ключ |
unique constraint | ограничение на уникальность значений |
query | запрос |
query engine | подсистема запросов |
database | база данных |
database engine | подсистема хранения данных |
fill factor | коэффициент заполнения индекса |
surrogate primary key | суррогатный первичный ключ |
query optimizer | оптимизатор запросов |
index selectivity | избирательность индекса |
filtered index | фильтруемый индекс |
execution plan | план выполнения |
Основы индексов в SQL Server
Одним из важнейших путей достижения высокой производительности SQL Server является использование индексов. Индекс ускоряет процесс запроса, предоставляя быстрый доступ к строкам данных в таблице, аналогично тому, как указатель в книге помогает вам быстро найти необходимую информацию. В этой статье я приведу краткий обзор индексов в SQL Server и объясню как они организованы в базе данных и как они помогают ускорению выполнения запросов к базе данных.
Структура индекса
Индексы создаются для столбцов таблиц и представлений. Индексы предоставляют путь для быстрого поиска данных на основе значений в этих столбцах. Например, если вы создадите индекс по первичному ключу, а затем будете искать строку с данными, используя значения первичного ключа, то SQL Server сначала найдет значение индекса, а затем использует индекс для быстрого нахождения всей строки с данными. Без индекса будет выполнен полный просмотр (сканирование) всех строк таблицы, что может оказать значительное влияние на производительность.
Вы можете создать индекс на большинстве столбцов таблицы или представления. Исключением, преимущественно, являются столбцы с типами данных для хранения больших объектов (LOB), таких как image, text или varchar(max). Вы также можете создать индексы на столбцах, предназначенных для хранения данных в формате XML, но эти индексы устроены немного иначе, чем стандартные и их рассмотрение выходит за рамки данной статьи. Также в статье не рассматриваются columnstore индексы. Вместо этого я фокусируюсь на тех индексах, которые наиболее часто применяются в базах данных SQL Server.
Индекс состоит из набора страниц, узлов индекса, которые организованы в виде древовидной структуры — сбалансированного дерева. Эта структура является иерархической по своей природе и начинается с корневого узла на вершине иерархии и конечных узлов, листьев, в нижней части, как показано на рисунке:
Когда вы формируете запрос на индексированный столбец, подсистема запросов начинает идти сверху от корневого узла и постепенно двигается вниз через промежуточные узлы, при этом каждый слой промежуточного уровня содержит более детальную информацию о данных. Подсистема запросов продолжает двигаться по узлам индекса до тех пор, пока не достигнет нижнего уровня с листьями индекса. К примеру, если вы ищете значение 123 в индексированном столбе, то подсистема запросов сначала на корневом уровне определит страницу на первом промежуточном (intermediate) уровне. В данном случае первой страница указывает на значение от 1 до 100, а вторая от 101 до 200, таким образом подсистема запросов обратится ко второй странице этого промежуточного уровня. Далее будет выяснено, что следует обратиться к третьей странице следующего промежуточного уровня. Отсюда подсистема запросов прочитает на нижнем уровне значение самого индекса. Листья индекса могут содержать как сами данные таблицы, так и просто указатель на строки с данными в таблице, в зависимости от типа индекса: кластеризованный индекс или некластеризованный.
Кластеризованный индекс
Кластеризованный индекс хранит реальные строки данных в листьях индекса. Возвращаясь к предыдущему примеру, это означает что строка данных, связанная со значение ключа, равного 123 будет храниться в самом индексе. Важной характеристикой кластеризованного индекса является то, что все значения отсортированы в определенном порядке либо возрастания, либо убывания. Таким образом, таблица или представление может иметь только один кластеризованный индекс. В дополнение следует отметить, что данные в таблице хранятся в отсортированном виде только в случае если создан кластеризованный индекс у этой таблицы.
Таблица не имеющая кластеризованного индекса называется кучей.
Некластеризованный индекс
В отличие от кластеризованного индекса, листья некластеризованного индекса содержат только те столбцы (ключевые), по которым определен данный индекс, а также содержит указатель на строки с реальными данными в таблице. Это означает, что системе подзапросов необходима дополнительная операция для обнаружения и получения требуемых данных. Содержание указателя на данные зависит от способа хранения данных: кластеризованная таблица или куча. Если указатель ссылается на кластеризованную таблицу, то он ведет к кластеризованному индексу, используя который можно найти реальные данные. Если указатель ссылается на кучу, то он ведет к конкретному идентификатору строки с данными. Некластеризованные индексы не могут быть отсортированы в отличие от кластеризованных, однако вы можете создать более одного некластеризованного индекса на таблице или представлении, вплоть до 999. Это не означает, что вы должны создавать как можно больше индексов. Индексы могут как улучшить, так и ухудшить производительность системы. В дополнение к возможности создать несколько некластеризованных индексов, вы можете также включить дополнительные столбцы (included column) в свой индекс: на листьях индекса будет храниться не только значение самих индексированных столбцов, но и значения этих не индексированных дополнительных столбцов. Этот подход позволит вам обойти некоторые ограничения, наложенные на индекс. К примеру, вы можете включить неидексируемый столбец или обойти ограничение на длину индекса (900 байт в большинстве случаев).
Типы индексов
В дополнение к тому, что индекс может быть либо кластеризованным, либо некластеризованным, возможно его дополнительно сконфигурировать как составной индекс, уникальный индекс или покрывающий индекс.
Составной индекс
Такой индекс может содержать более одного столбца. Вы можете включить до 16 столбцов в индекс, но их общая длина ограничена 900 байтами. Как кластеризованный, так и некластеризованный индексы могут быть составными.
Уникальный индекс
Покрывающий индекс
Такой индекс позволяет конкретному запросу сразу получить все необходимые данные с листьев индекса без дополнительных обращений к записям самой таблицы.
Проектирование индексов
Насколько полезны индексы могут быть, настолько аккуратно они должны быть спроектированы. Поскольку индексы могут занимать значительное дисковое пространство, вы не захотите создавать индексов больше, чем необходимо. В дополнение, индексы автоматически обновляются когда сама строка с данными обновляется, что может привести к дополнительным накладным расходам ресурсов и падению производительности. При проектирование индексов должно приниматься во внимание несколько соображений относительно базы данных и запросов к ней.
База данных
Запросы к базе данных
А теперь, собственно:
14 вопросов об индексах в SQL Server, которые вы стеснялись задать
Почему таблица не может иметь два кластеризованных индекса?
Хотите короткий ответ? Кластеризованный индекс – это и есть таблица. Когда вы создаете кластеризованный индекс у таблицы, подсистема хранения данных сортирует все строки в таблице в порядке возрастания или убывания, согласно определению индекса. Кластеризованный индекс это не отдельная сущность как другие индексы, а механизм сортировки данных в таблице и облегчения быстрого доступа к строкам с данными.
Представим, что у вас есть таблица, содержащая историю операций по продажам. Таблица Sales включает в себя такую информация как идентификатор заказа, позицию товара в заказе, номер товара, количество товара, номер и дату заказа и т.д. Вы создаёте кластеризованный индекс по столбцам OrderID и LineID, с сортировкой в порядке возрастания, как показано в следующем T-SQL коде:
Когда вы запустите этот скрипт все строки в таблице будут физически отсортированы сначала по столбцу OrderID, а затем по LineID, но сами данные останутся в единственном логическом блоке, в таблице. По этой причине вы не можете создать два кластеризованных индекса. Может быть только одна таблица с одними данными и эта таблица может быть отсортирована только один раз в определенном порядке.
Если кластеризованная таблица даёт множество преимуществ, то зачем использовать кучу?
Вы правы. Кластеризованые таблицы отличны и большинство ваших запросов будут лучше выполнятся к таблицам, имеющим кластеризованный индекс. Но в некоторых случаях вы возможно захотите оставить таблицы в их естественном первозданном состоянии, т.е. в виде кучи, и создать лишь некластеризованные индексы для поддержания работоспособности ваших запросов.
Куча, как вы помните, хранит данные в случайном порядке. Обычно подсистема хранения данных добавляет в таблицу данные в той последовательности в которой они вставляются, однако подсистема также любит перемещать строки с целью более эффективного хранения. В результате у вас нет ни единого шанса предсказать в каком порядке будут храниться данные.
Если подсистема запросов должна найти данные без преимуществ некластеризованного индекса, то она сделает полное сканирование таблицы для нахождения нужных ей строк. На очень маленьких таблицах это обычно не проблема, но как только куча растет в своих размерах производительность быстро падает. Конечно, некластеризованный индекс может помочь, используя указатель на файл, страницу и строку где хранятся необходимые данные – обычно это намного лучшая альтернатива сканированию таблицы. Но даже в этом случае трудно сравнивать с преимуществами кластеризованного индекса при рассмотрении производительности запросов.
Однако куча может помочь улучшить производительность в определенных ситуациях. Рассмотрим таблицу с большим количеством вставок, но редкими обновлениями или удалением данных. К примеру, таблица, хранящая лог, преимущественно используется для вставки значений до тех пор пока не будет архивирована. В куче вы не увидите разбиением страниц и фрагментацию данных, как это случается с кластеризованным индексом, потому что строки просто добавляются в конец кучи. Слишком большое разделение страниц может иметь значительное влияние на производительность и в не самом хорошем смысле. В общем, куча позволяет производить вставку данных относительно безболезненно и вам не надо будет бороться с накладными расходами на хранение и обслуживание, как это бывает в случае кластеризованного индекса.
Но отсутствие обновления и удаления данных не должны рассматриваться как единственная причина. Способ выборки данных также является важным фактором. К примеру, вы не должны использовать кучу, если часто выполняете запросы диапазонов данных или запрашиваемые данные часто должны быть сортированы или сгруппированы.
Всё это означает, что вы должны рассматривать возможность использования кучи только когда работаете с особо-маленькими таблицами или всё ваше взаимодействие с таблицей ограничено вставкой данных и ваши запросы чрезвычайно просты (и вы все-равно используете некластеризованные индексы). В противном случае держитесь хорошо спроектированного кластеризованного индекса, к примеру определенного на простом возрастающем ключевом поле, как широко применяемый столбец с IDENTITY.
Как изменить установленное по умолчанию значение коэффициента заполнения индекса?
Изменение установленного по умолчанию коэффициента заполнения индекса это одно дело. Понимание того как установленный по умолчанию коэффициент работает это другое. Но сначала пару шагов назад. Коэффициент заполнения индекса определяет количество пространства на странице для хранения индекса на нижнем уровне (уровень листьев) перед тем как начать заполнять новую страницу. К примеру, если коэффициент выставлен в значение 90, то при росте индекс займет на странице 90%, а затем перейдет на следующую страницу.
По умолчанию, значение коэффициента заполнения индекса в SQL Server равно 0, что равнозначно значению 100. В результате все новые индексы автоматически наследуют эту настройки, если вы специально в коде не укажете отличное от стандартного для системы значения или измените поведение по умолчанию. Вы можете воспользоваться SQL Server Management Studio для корректировки установленного по умолчанию значения или запустить системную сохраненную процедуру sp_configure. К примеру, следующий набор T-SQL команд устанавливает значение коэффициента равное 90 (предварительно необходимо переключится в режим продвинутых настроек):
После изменения значения коэффициента заполнения индекса необходимо перезагрузить сервис SQL Server. Теперь вы можете проверить установленное значение, запустив процедуру sp_configure без указанного второго аргумента:
Данная команда должна вернуть значение равное 90. В результате все вновь создаваемые индексы будут использовать это значение. Вы можете проверить это, создав индекс и запросить значение коэффициента заполнения:
В данном примере мы создали некластеризованный индекс в таблице Person в базе данных AdventureWorks2012. После создания индекса мы можем получить значение коэффициента заполнения из системной таблиц sys.indexes. Запрос должен вернуть 90.
Однако, представим, что мы удалили индекс и снова создали его, но теперь указали конкретное значение коэффициента заполнения:
В этот раз мы добавили инструкцию WITH и опцию fillfactor для нашей операции создания индекса CREATE INDEX и указали значение 80. Оператор SELECT теперь возвращает соответствующее значение.
До сих пор всё было довольно-таки прямолинейно. Где вы реально можете погореть во всём этом процессе, так это когда вы создаёте индекс, использующий значение коэффициента по умолчанию, подразумевая, что вы знаете это значение. К примеру, кто-то неумело ковыряется в настройках сервера и он настолько упорот, что ставит значение коэффициента заполнения индекса равное 20. Тем временем вы продолжаете создавать индексы, предполагая значение по умолчанию равное 0. К сожалению, у вас нет способа узнать значение коэффициента до тех пор как вы не создадите индекс, а затем проверите значение, как мы делали в наших примерах. В противном случае, вам придётся ждать момента когда производительность запросов настолько упадёт, что вы начнёте что-то подозревать.
Другая проблема о которой вам стоит помнить это перестроение индексов. Как и при создании индекса вы можете конкретизировать значение коэффициента заполнения индекса, когда его перестраиваете. Однако, в отличие от команды создания индекса, перестройка не использует серверные настройки по умолчанию, несмотря на то что так может показаться. Даже больше, если вы конкретно не укажете значение коэффициента заполнения индекса, то SQL Server будет использовать то значение коэффициента, с которым этот индекс существовал до его перестройки. К примеру, следующая операция ALTER INDEX перестраивает только что созданный нами индекс:
Когда мы проверим значение коэффициента заполнения мы получим значение равное 80, потому что именно его мы указали при последнем создании индекса. Значение по умолчанию не учитывается.
Как вы видите изменить значение коэффициента заполнения индекса не такое уж сложно дело. Намного сложнее знать текущее значение и понимать когда оно применяется. Если вы всегда конкретно указывается коэффициент при создании и перестройки индексов, то вы всегда знаете конкретный результат. Разве что вам приходится заботиться о том, чтобы кто-то другой снова не напортачил в настройках сервера, вызвав перестройку всех индексов со смехотворно низким значением коэффициента заполнения индекса.
Можно ли создать кластеризованный индекс на столбце, содержащем дубликаты?
И да, и нет. Да вы можете создать кластеризованный индекс на ключевом столбце, содержащем дубликаты значений. Нет, значение ключевого столбца не смогут остаться в состоянии не уникальности. Позвольте объяснить. Если вы создаёте неуникальный кластерный индекс (non-unique clustered index) на столбце, то подсистема хранения данных добавляет к дублирующему значению целочисленное значение (uniquifier), чтобы удостовериться в уникальности и, соответственно, обеспечить возможность идентифицировать каждую строку в кластеризованной таблице.
К примеру, вы можете решить создать в таблице с данными о клиентах кластеризованный индекс по столбцу LastName, хранящим фамилию. Столбец содержит такие значения как Franklin, Hancock, Washington и Smith. Затем вы вставляете значения Adams, Hancock, Smith и снова Smith. Но значение ключевого столбца обязательно должны быть уникальны, поэтому подсистема хранения данных изменит значение дубликатов таким образом, что они будут выглядеть примерно так: Adams, Franklin, Hancock, Hancock1234, Washington, Smith, Smith4567 и Smith5678.
На первый взгляд такой подход кажется нормальным, но целочисленное значение увеличивает размер ключа, что может стать проблемой при большом количестве дубликатов, а эти значения станут основой некластеризованного индекса или ссылкой внешнего ключа. По этим причинам вы всегда должны стараться создавать уникальный кластеризованный (unique clustered indexes) при любой возможности. Если это невозможно, то по крайней мере постарайтесь использовать столбцы с очень высоким содержание уникальных значений.
Как хранится таблица, если не был создан кластеризованный индекс?
SQL Server поддерживает два типа таблиц: кластеризованные таблицы, имеющие кластеризованный индекс и таблицы-кучи или просто кучи. В отличие от кластеризованных таблиц данные в куче не сортированы никоим образом. По сути это и есть нагромождение (куча) данных. Если вы добавите строку к такой таблице, то подсистема хранения данных просто добавит её к концу страницы. Когда страница заполнится данными, то они будут добавлены на новую страницу. В большинстве случаев, вы захотите создать кластеризованный индекс на таблице, чтобы получить преимущества от возможности сортировки и ускорения запросов (попробуйте представить себе найти телефонный номер в адресной книге, не отсортированной по какому-либо принципу). Однако, если вы решите не создавать кластеризованный индекс, то вы по-прежнему можете создать у кучи некластеризованный индекс. В этом случае каждая строка индекса будет иметь указатель на строку кучи. Указатель включает в себя идентификатор файла, номер страницы и номер строки с данными.
Какая взаимосвязь между ограничениями на уникальность значения и первичным ключом с индексами таблицы?
Первичный ключ и и ограничение уникальности обеспечивают, что значения в столбце будут уникальны. Вы можете создать только один первичный ключ у таблицы и он не может содержать значения NULL. Вы можете создать у таблицы несколько ограничений на уникальность значения и каждый из них может иметь единственную запись с NULL.
Когда вы создаете первичный ключ, подсистема хранения данных так же создает уникальный кластеризованный индекс, в случае если уже кластеризованный индекс не был создан. Однако, вы можете переопределить установленное по умолчанию поведение и тогда будет создан некластеризованный индекс. Если кластеризованный индекс существует когда вы создаёте первичный ключ, то будет создан уникальный некластеризованный индекс.
Когда вы создаете ограничение на уникальность, подсистема хранения данных создает уникальный некластеризованный индекс. Но вы можете указать создание уникального кластеризованного индекса, если он не был создан ранее.
В общем случае, ограничение на уникальность значение и уникальный индекс это одно и то же.
Почему в SQL Server кластеризованные и некластеризованные индексы называются сбалансированным деревом?
Базовые индексы в SQL Server, кластеризованные или некластеризованные, распространяются по наборам страниц – узлам индекса. Эти страницы организованы в виде определенной иерархии с древовидной структурой, называемой сбалансированным деревом. На верхнем уровне находится корневой узел, на нижнем, конечные узлы листьев, с промежуточными узлами между верхним и нижним уровнями, как показано на рисунке:
Корневой узел предоставляет главную точку входа для запросов, пытающихся получить данные через индекс. Начиная с этого узла, подсистема запросов инициирует переход по иерархической структуре вниз к подходящему конечному узлу, содержащему данные.
К примеру, представим, что поступил запрос на выборку строк, содержащих значение ключа равное 82. Подсистема запросов начинает работу с корневого узла, который отсылает к подходящему промежуточному узлу, в нашем случае 1-100. От промежуточного узла 1-100 происходит переход к узлу 51-100, а оттуда к конечному узлу 76-100. Если это кластеризованный индекс, то на листе узла содержится данные строки, ассоциированной с ключом равным 82. Если же это некластеризованный индекс, то лист индекса содержит указатель на кластеризованную таблицу или конкретную строку в куче.
Как вообще индекс может улучшить производительность запросов, если приходится переходить по всем этим индексным узлам?
Во-первых, индексы не всегда улучшают производительность. Слишком много неверно созданных индексов превращают систему в болото и понижают производительность запросов. Правильнее сказать, что если индексы были аккуратно применены, то они могут обеспечить значительный прирост в производительности.
Подумайте об огромной книге, посвященной настройке производительности SQL Server (бумажной, не об электронном варианте). Представьте, что вы хотите найти информацию о конфигурировании Регулятора ресурсов. Вы можете водить пальцем постранично через всю книгу или открыть содержание и узнать точный номер страницы с искомой информацией (при условии, что книга правильно проиндексирована и в содержании верные указатели). Безусловно, это сэкономит вам значительное время, не смотря на то, что вам надо сначала обратиться к совершенно другой структуре (индексу), чтобы получить необходимую вам информацию из первичной структуры (книги).
Как и книжный указатель, указатель в SQL Server позволяет вам выполнять точные запросы к нужным данным вместо полного сканирования всех данных, содержащихся в таблице. Для маленьких таблиц полное сканирование обычно не проблема, но большие таблицы занимают много страниц с данными, что в результате может привезти с значительному времени выполнения запроса, если не существует индекса, позволяющего подсистеме запросов сразу получить правильное месторасположение данных. Представьте, что вы заблудились на многоуровневой дорожной развязке перед крупным мегаполисом без карты и вы поймёте идею.
Если индексы настолько замечательны, то почему бы просто не создать их на каждый столбец?
Ни одно доброе дело не должно оставаться безнаказанным. По крайней мере, именно так и обстоит дело с индексами. Разумеется, индексы отлично себя показывают, пока вы выполняете запросы на выборку данных оператором SELECT, но как только начинается частый вызов операторов INSERT, UPDATE и DELETE, так пейзаж очень быстро меняется.
Когда вы инициируется запрос данных оператором SELECT, подсистема запросов находит индекс, продвигается по его древовидной структуре и обнаруживает искомые данные. Что может быть проще? Но все меняется, если вы инициируете оператор изменения, такой как UPDATE. Да, для первой части оператора подсистема запросов может снова использовать индекс для обнаружения модифицируемой строки – это хорошие новости. И если происходит простое изменение данных в строке, не затрагивающее изменение ключевых столбцов, то процесс изменения пройдет вполне безболезненно. Но что, если изменение приведет к разделению страниц, содержащих данные, или будет изменено значение ключевого столбца, приводящее к переносу его в другой индексный узел – это приведёт к тому, что индексу может потребоваться реорганизация, затрагивающая все связанные индексы и операции, в результате будет повсеместное падение производительности.
Аналогичные процессы происходят при вызове оператора DELETE. Индекс может помочь найти месторасположение удаляемых данных, но само по себе удаление данных может привести к перестановке страниц. Касаемо оператора INSERT, главного врага всех индексов: вы начинаете добавлять большое количество данных, что приводит к изменению индексов и их реорганизации и все страдают.
Так что учитывайте виды запросов к вашей базе данных при размышлениях какой тип индексов и в каком количестве стоит создавать. Больше не значит лучше. Перед тем как добавить новый индекс на таблицу просчитайте стоимость не только базовых запросов, но и объем занимаемого дискового пространства, стоимость поддержания работоспособности и индексов, что может привести к эффекту домино для других операций. Ваша стратегия проектирования индексов один из важнейших аспектов внедрения и должна включать в рассмотрение множество соображений: от размера индекса, количества уникальных значений, до типа поддерживаемых индексом запросов.
Обязательно ли создавать кластеризованный индекс на столбце с первичным ключом?
Вы можете создать кластеризованный индекс на любой столбце, соответствующем необходимым условиям. Это верно, что кластеризованный индекс и ограничение первичного ключа созданы друг для друга и их брак заключен на небесах, так что усвойте факт, что когда вы создаете первичный ключ, тогда же будет автоматически создан кластеризованный индекс, если он не был создан ранее. Тем не менее, вы можете решить, что кластеризованный индекс будет лучше работать в другом месте, и часто ваше решение будет вполне оправданным.
Главная цель кластеризованного индекса это сортировка всех строк к вашей таблице на основе ключевого столбца, указанного при определении индекса. Это обеспечивает быстрый поиск и легкий доступ к данным таблицы.
Первичный ключ таблицы может быть хорошим выбором, потому что он однозначно идентифицирует каждую строку в таблицы без необходимости добавлять дополнительные данные. В некоторых случаях лучшим выбором будет суррогатный первичный ключ, обладающий не только признаком уникальности, но и малым размером, а значения которого увеличиваются последовательно, что делает некластеризованные индексы, основанные на этом значении более эффективными. Оптимизатор запросов также любит такое сочетание кластеризованого индекса и первичного ключа, потому что соединение таблиц происходит быстрее, чем при соединении другим способом, не использующим первичный ключ и ассоциированный с ним кластеризованный индекс. Как я и говорил это брак, заключенный на небесах.
В конце стоит, однако, отметить, что при создании кластеризованного индекса необходимо принять во внимание несколько аспектов: как много некластеризованных индексов будет основываться на нём, как часто будут изменяться значение ключевого столбца индекса и на сколько ни большие. Когда значение в столбцах кластеризованого индекса изменятся или индекс не будет обеспечивать должной производительности, тогда все другие индексы таблицы могут быть задеты. Кластеризованный индекс должен быть основан на наиболее устойчивом столбце, значения которого увеличиваются в определенном порядке, но не изменяются в случайном. Индекс должен поддерживать запросы к наиболее часто используемым данным таблицы, таким образом запросы получают все преимущества того, что данные сортированы и доступны на корневых узлах, листьях индекса. Если первичный ключ соответствует этому сценарию, то используйте его. Если же нет, то выберите другой набор столбцов.
А что если проиндексировать представление, то это по-прежнему будет представление?
Представление – это виртуальная таблица, формирующая данные из одной или нескольких таблиц. По сути, это именованный запрос, который получает данные из нижележащих таблиц, когда вы вызываете запрос к этому представлению. Вы можете улучшить производительность запросов, создав кластеризованных индекс и некластеризованные индексы у этого представления, аналогично как вы создаете индексы у таблицы, но основной нюанс состоит в том, что первоначально создается кластеризованный индекс, а затем вы можете создать некластеризованный.
Когда создается индексированное представление (материализованное представление), тогда само определение представления остается отдельной сущностью. Это, в конце концов, всего лишь жестко прописанный оператор SELECT, хранящийся в базе данных. А вот индекс совсем другая история. Когда вы создаете кластеризованный или некластеризованный индекс у предастваления, то данные физически сохраняются на диск, аналогично обычному индексу. В дополнение, когда в нижележащих таблицах изменяются данные, то индекс представления автоматически изменяется (это означает, что вы можете захотеть избежать индексирования представлений тех таблиц, в которых происходят частые изменения). В любом случае, представление остается представлением — взглядом на таблицы, но именно выполненном в данный момент, с индексами ему соответствующими.
Перед тем как вы сможете создать индекс у представления, оно должно соответствовать нескольким ограничениям. К примеру, представление может ссылаться только на базовые таблицы, но не другие представления и эти таблицы должны находиться в той же самой базе данных. На самом деле там множество других ограничений, так что не забудьте обратиться к документации по SQL Server за всеми грязными подробностями.
Зачем использовать покрывающий индекс взамен составного индекса?
Во-первых, давайте убедимся, что мы понимаем различие между ними. Составной индекс это просто обычный индекс, в который включено больше одного столбца. Несколько ключевых столбцов может использоваться для обеспечения уникальности каждой строки таблицы, также возможен вариант, когда первичный ключ состоит из нескольких столбцов, обеспечивающих его уникальность, или вы пытаетесь оптимизировать выполнение часто вызываемых запросов к нескольким столбцам. В общем, однако, чем больше ключевых столбцов содержит индекс, тем менее эффективна работа этого индекса, а значит составные индексы стоит использовать разумно.
Как было сказано, запрос может извлечь огромную выгоду, если все необходимые данные сразу расположены на листьях индекса, как и сам индекс. Это не проблема для кластеризованного индекса, т.к. все данные уже там (вот почему так важно хорошенько подумать когда вы создаете кластеризованный индекс). Но некластеризованный индекс на листьях содержит только ключевые столбцы. Для доступа ко всем остальным данным оптимизатору запросов необходимы дополнительные шаги, что может вызвать значительные дополнительные накладные расходы для выполнения ваших запросов.
Вот где покрывающий индекс спешит на помощь. Когда вы определяете некластеризованный индекс, то можете указать дополнительные столбцы к вашим ключевым. К примеру, представим, что ваше приложение часто запрашивает данные столбцов OrderID и OrderDate в таблице Sales:
Вы можете создать составной некластеризованный индекс на обоих столбцах, но столбец OrderDate только добавит накладных расходов на обслуживание индекса, но так и не сможет служить особо полезным ключевым столбцом. Лучшее решение будет это создание покрывающего индекса с ключевым столбцом OrderID и дополнительно включенным столбцом OrderDate:
При этом вы избегаете недостатков, возникающих при индексации излишних столбцов, в то же время сохраняете преимущества хранения данных на листьях при выполнении запросов. Включенный столбец не является частью ключа, но данные хранятся именно на конечном узле, листе индекса. Это может улучшить производительность выполнения запроса без каких либо дополнительных расходов. К тому же, на столбцы, включенные в покрывающий индекс, накладывается меньше ограничений, нежели на ключевые столбцы индекса.
Имеет ли значение количество дубликатов в ключевом столбце?
Когда вы создаете индекс, вы обязаны постараться уменьшить количество дубликатов в ваших ключевых столбцах. Или более точно: стараться держать коэффициент повторяющихся значений настолько низким, насколько это возможно.
Если вы работаете с составным индексом, то дублирование относится ко всем ключевым столбцам в целом. Отдельный столбец может содержать множество повторяющихся значений, но повторения среди всех столбцов индекса должно быть минимальным. К примеру, вы создаете составной некластеризованный индекс на столбцах FirstName и LastName, вы можете иметь множество значений равных John и множество Doe, но вы хотите иметь как можно меньше значений John Doe, или лучше только одно значение John Doe.
Коэффициент уникальности значений ключевого столбца называется избирательностью индекса. Чем больше уникальных значений, тем выше избирательность: уникальный индекс обладает наибольшей возможной избирательностью. Подсистема запросов очень любит столбцы с высоким значением избирательности, особенно если эти столбцы участвуют в условиях выборки WHERE ваших наиболее часто выполняемых запросов. Чем выше избирательность индекса, тем быстрее подсистема запросов может уменьшить размер результирующего набора данных. Обратной стороной, разумеется, является то, что столбцы с относительно небольшим количеством уникальных значений редко будут хорошими кандидатами на индексирование.
Можно ли создать некластеризованный индекс только для определенного подмножества данных ключевого столбца?
По умолчанию, некластеризованный индекс содержит по одной строке для каждой строки таблицы. Конечно, вы можете сказать то же самое относительно кластеризованного индекса, принимая в расчет, что такой индекс это и есть таблица. Но что касается некластеризованного индекса, то отношение «один к одному» важный концепт, потому что, начиная с версии SQL Server 2008, у вас есть возможность создать фильтруемый индекс, который ограничивает включенные в него строки. Фильтруемый индекс может улучшить производительность выполнения запросов, т.к. он меньше по размеру и содержит отфильтрованную, более аккуратную, статистику, чем вся табличная — это приводит к созданию улучшенных планов выполнения. Фильтруемый индекс также требует меньше места для хранения и меньших затрат на обслуживание. Индекс обновляется только когда изменяются подходящие под фильтр данные.
В дополнение, фильтруемый индекс легко создать. В операторе CREATE INDEX просто необходимо указать в WHERE условие фильтрации. К примеру, вы можете отфильтровать из индекса все строки, содержащие NULL, как показано в коде:
Мы можем, фактически, отфильтровать любые данные, которые не важны в критических запросах. Но будьте внимательны, т.к. SQL Server накладывает несколько ограничений на фильтруемые индексы, такие, как невозможность создать фильтруемый индекс у представления, так что внимательно читайте документацию.
Также, может случиться, что вы можно достичь подобных результатов созданием индексированного представления. Однако, фильтруемый индекс имеет несколько преимуществ, таких как возможность уменьшить стоимость обслуживания и улучшить качество ваших планов выполнения. Фильтруемые индексы также допускают перестройку в онлайн-режиме. Попробуйте это сделать с индексируемым представлением.
Целью появления данного перевода на страницах Хабрахабра было рассказать или напомнить вам о блоге SimpleTalk от RedGate.
В нём публикуется множество занимательных и интересных записей.
Я не связан ни с продуктами фирмы RedGate, ни с их продажей.