Arhn - архитектура программирования

Производительность индекса, кластеризованный и некластеризованный

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

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


  • Какую базу данных вы используете? MySQL или SQL-сервер? 28.06.2014
  • sql-сервер. 15 символов 28.06.2014
  • ну да, я бы согласился. если вам нужен только 1 индекс, он должен быть кластеризованным. но для аналитических целей таблицы обычно имеют много индексов, поэтому (n-1) должен быть некластеризованным. и если есть кластеризованный индекс и происходит сканирование некластеризованного индекса, вместо некластеризованных результатов, являющихся RID, это ссылка на кластеризованный индекс. поэтому мой вопрос: если в таблице есть несколько индексов, лучше ли просто исключить кластеризованный индекс, чтобы при поиске не приходилось проходить через кластеризованный индекс каждый раз, когда происходит некластеризованный поиск - это должно сэкономить время 28.06.2014
  • Проверьте покрывающие индексы. Таким образом, это не прямой ответ на ваш вопрос, но покрывающий индекс содержит дополнительные поля и может предоставлять информацию без чтения строк из таблицы. Конечно, при штрафе за хранение. 28.06.2014
  • Покрытые индексы @faester являются исключением из моего вопроса ... хотя они все еще очень полезны. если индекс охватывает запрос, то нет необходимости использовать RID (или ссылаться на кластеризованный индекс, если он существует), поэтому это будет исключением из моего вопроса. 28.06.2014
  • Снижение производительности при использовании логического избавления вместо физического может быть меньше, чем вы предполагаете. Кроме того, если вы храните базовую таблицу в виде кучи, это означает, что ни один индекс вообще не может ее использовать без необходимости выполнять поиск в ней (быстро становится дорогим) или дублировать данные в самом NCI. Это означает, что он хранится дважды и должен поддерживаться дважды. 28.06.2014
  • @MartinSmith спасибо, это именно то, что я искал. моя единственная жалоба заключается в том, что я бы хотел, чтобы FILIP проверил другие операторы ... такие как «где», «группировка» и т. д. Я не вижу, чтобы я слишком часто использовал вставку, обновление, удаление в рассматриваемой таблице, но это все еще интересно. см.. Я склонен загружать данные в большом количестве и просто удаляю индекс перед рукой, чтобы сделать его быстрее. затем я просто повторно добавляю индекс после. но все же 20-30% это довольно существенно... 29.06.2014

Ответы:


1

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

Я не слежу за вашим утверждением.

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

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

Руководство по проектированию кластеризованного индекса

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

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

Структуры некластеризованных индексов

Локаторы строк в строках некластеризованного индекса являются либо указателем на строку, либо ключом кластеризованного индекса для строки, как описано ниже:

  • Если таблица представляет собой кучу, что означает, что она не имеет кластеризованного индекса, локатор строк является указателем на строку. Указатель создается из идентификатора файла (ID), номера страницы и номера строки на странице. Весь указатель называется идентификатором строки (RID).
  • Если таблица имеет кластеризованный индекс или индекс находится в индексированном представлении, локатор строк является ключом кластеризованного индекса для строки. Если кластеризованный индекс не является уникальным индексом, SQL Server делает любые повторяющиеся ключи уникальными, добавляя внутренне сгенерированное значение, называемое уникальным. Это четырехбайтовое значение невидимо для пользователей. Он добавляется только тогда, когда требуется сделать кластеризованный ключ уникальным для использования в некластеризованных индексах. SQL Server извлекает строку данных путем поиска в кластеризованном индексе с использованием ключа кластеризованного индекса, хранящегося в конечной строке некластеризованного индекса.

У них была возможность использовать RID, даже если был ПК. Как вы думаете, почему кластерный индекс работает медленнее?

28.06.2014
  • @ последний абзац — кластеризованный всегда должен быть быстрее, чем некластеризованный, потому что кластеризованный не должен обращаться к данным. Но у меня сложилось впечатление, что если уже есть кластеризованные, некластеризованные результаты должны пройти через все B-дерево кластеризованного индекса, чтобы добраться до соответствующего номера строки. Имеет ли это смысл? поэтому вместо того, чтобы просто ссылаться на номер строки напрямую, как это обычно бывает, чтобы получить номер строки, он должен пройти через кластеризованный ПОСЛЕ некластеризованного. Вот откуда берется хит производительности.. 28.06.2014
  • @ user3739391 Нет, я этого не понимаю. Если бы RID был быстрее, они бы его использовали. Какие у вас есть доказательства того, что RID работает быстрее? Знаете ли вы структуру RID (в SQL)? Множественные индексы являются обычным явлением. Если бы отсутствие кластерного индекса было лучше в сценарии с несколькими индексами, вы бы сочли эту рекомендацию большой и смелой. 28.06.2014
  • по идее должно быть быстрее. по этой причине кластеризованный быстрее, чем некластеризованный - ему не нужно использовать RID. но для некластеризованного (то есть не покрытого индекса) результаты этого должны быть пропущены через кластеризованный индекс, чтобы найти правильную запись, потому что RID не используется, когда в таблице также есть кластеризованный. Так что в итоге логично сделать вывод, что это будет означать удар по производительности. 28.06.2014
  • У вас НЕТ доказательств того, что RID работает быстрее, так что перестаньте утверждать, что теоретически это так. У SQL была возможность использовать RID, но не было. Вы не найдете рекомендаций в MDSN, подтверждающих ваше теоретическое утверждение. 28.06.2014
  • хорошо, я проверю это, когда вернусь к работе и вернусь к вам. и RID НЕ всегда быстрее, но в случае кластеризованного индекса, уже существующего в таблице, это должно быть таковым, потому что он может просто использовать RID для идентификации записи вместо того, чтобы проходить через весь кластеризованный индекс для поиска записи. это просто логично. 28.06.2014
  • dba.stackexchange.com/questions/9829/ . Оказывается, это действительно увеличивает производительность на 20-30%, как я и думал. 29.06.2014
  • @user3739391 user3739391 Я не удаляю свои кластерные индексы, но это было весело. 29.06.2014
  • @user3739391 user3739391 может случиться так, что когда вы удаляете оптимизатор кластеризованного индекса, выбирая лучший план выполнения, но, конечно, избавиться (дополнительные 8 байтов) не является хорошим вариантом для использования, используйте вставленный узкий кластеризованный индекс, если вы хотите вдаваться в подробности, почему без кластерного индекса, почему он работает лучше, опубликуйте план выполнения, с кластерным индексом и без него. 01.07.2014
  • @NeerajPrasadSharma вот исследование, которое показывает увеличение производительности на 20-30%. Я не проверял это на себе. dba.stackexchange.com/questions/9829/ 03.07.2014
  • я только что сделал быстрый тест (sql server 2012) только для выбора, когда требуется поиск. Время почти такое же, но логическое чтение почти наполовину выполняется при поиске по ридам, а не при поиске по ключу. 04.07.2014
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..