SQL Server: поиск или сканирование. Если столбец уникален и не относится к целому или числовому типу, начиная с 0
Содержание:
1. Проблема возрастающего ключа;
2. Если столбец неуникальный и относится к целому или числовому типу, начиная с 0;
3.Если столбец уникален и не относится к целому или числовому типу, начиная с 0 (Вы читаете данный раздел).
В этой части статьи мы рассмотрим случаи, когда столбец является уникальным и не относится к целому или числовому типу, начиная с 0. Например, типом столбца является NUMERIC (12, 2), FLOAT, DATETIME и т. д. Для тестирования этого случая в сценарии, генерирующем демонстрационные данные, просто сменим тип столбца orderid на NUMERIC (12, 2) и обеспечим создание уникального индекса. Начнем с предикатов фильтра, не пересекающихся с максимальным значением на гистограмме. CE более старой версии последовательно выдает оценку 1. CE новой версии, видимо, использует следующую формулу (получена путем реконструирования):
Это несколько измененный в сторону уменьшения вариант формулы, используемой для целого или числового типа, начиная с 0. В данном случае для аналогичного предиката получаем оценку 30000. Если предикат фильтра пересекается с максимальным значением на гистограмме, СЕ более старой версии пересчитывает оценочную гистограмму с учетом modctr, как и в случае целого или числового типа, начиная с 0.
CE новой версии действует похоже, но не совсем так. Если предикат фильтра включает верхнюю границу (например, orderid >= 900000), получается оценка 1. Если интервал предиката начинается перед максимальным значением (например, orderid >= 899995), то используется следующая формула (опять-таки, получена путем реконструирования): (Оценка гистограммы — 1) х (1 + modctr/старое входное значение числа элементов) + 2
Таким образом, для предиката orderid >= 899995 получаем (6 — 1) х (1 + 100000/900000) + 2 = 7,55555. Если столбец неуникален и не относится к целому или числовому типу, начиная с 0.
В этом разделе рассматриваются случаи, когда столбец не является уникальным и не относится к целому или числовому типу, начиная с 0. Для исследования такого случая в сценарии, генерирующем демонстрационные данные, просто сменим тип столбца orderid на NUMERIC (12, 2) и обеспечим создание неуникального индекса. Как и раньше, начнем с предикатов фильтра, не пересекающихся с максимальным значением на гистограмме.
CE более старой версии, как и во всех других случаях, генерирует оценку 1. CE новой версии использует тот же метод, что и в случае с неуникальным столбцом, относящимся к целому или числовому типу, начиная с 0, а именно применяет к modctr процентное значение, предусмотренное для используемого оператора с неизвестным входом. Таким образом, для modctr, равного 100000, при использовании оператора > получаем оценку 30000.
Если предикат фильтра пересекается с максимальным значением на гистограмме, CE более старой версии последовательно пересчитывает гистограмму с учетом значения modctr.
При использовании CE новой версии, когда предикат фильтра включает верхнюю границу, оценка, видимо, получается из оценки гистограммы, пересчитанной с учетом modctr. Если интервал предиката начинается до максимального значения на гистограмме, то оценка, по-видимому, вычисляется как (оценка по гистограмме + 1), пересчитанная с учетом modctr.
Например, для предиката orderid >= 900000 получаем оценку 1,11111. Для предиката orderid >= 899995 оценка вычисляется как (6 + 1) х (1 + 100000/900000) - 7,77777.
Сводная таблица методов оценки числа элементов
В таблице выше приведены разные методы, используемые блоком оценки числа элементов (СЕ) в различных обстоятельствах (опять-таки на основе результатов моих попыток реконструирования формул). Разнообразие методов, используемых в новой версии СЕ в различных обстоятельствах, может привести в замешательство. Однако надеюсь, что эта статья даст вам некоторое представление о том, что происходит за гранью видимого, даже если иногда действия кажутся не совсем логичным.
Вот и все: с функциями поиска и сканирования в SQL Server мы разобрались и теперь можем устроить перекур... в прямом смысле этого слова. И, в связи с этим, я хочу посоветовать вам сигареты winston en ligne (http://www.francecigs.com/fr/j2/winston.html), обладающие эталонным качеством и неповторимым вкусом. Подробнее на francecigs.com.
1. Проблема возрастающего ключа;
2. Если столбец неуникальный и относится к целому или числовому типу, начиная с 0;
3.
В этой части статьи мы рассмотрим случаи, когда столбец является уникальным и не относится к целому или числовому типу, начиная с 0. Например, типом столбца является NUMERIC (12, 2), FLOAT, DATETIME и т. д. Для тестирования этого случая в сценарии, генерирующем демонстрационные данные, просто сменим тип столбца orderid на NUMERIC (12, 2) и обеспечим создание уникального индекса. Начнем с предикатов фильтра, не пересекающихся с максимальным значением на гистограмме. CE более старой версии последовательно выдает оценку 1. CE новой версии, видимо, использует следующую формулу (получена путем реконструирования):
(Процентное значение, предусмотренное для оператора с неизвестным входом х modctr)/
(1 + modctr/новое входное значение числа элементов).
Например, для предиката orderid > 900000 получаем (0.30 х 100000)/(1 + 100000/1000000) - 27272.7 Это несколько измененный в сторону уменьшения вариант формулы, используемой для целого или числового типа, начиная с 0. В данном случае для аналогичного предиката получаем оценку 30000. Если предикат фильтра пересекается с максимальным значением на гистограмме, СЕ более старой версии пересчитывает оценочную гистограмму с учетом modctr, как и в случае целого или числового типа, начиная с 0.
CE новой версии действует похоже, но не совсем так. Если предикат фильтра включает верхнюю границу (например, orderid >= 900000), получается оценка 1. Если интервал предиката начинается перед максимальным значением (например, orderid >= 899995), то используется следующая формула (опять-таки, получена путем реконструирования): (Оценка гистограммы — 1) х (1 + modctr/старое входное значение числа элементов) + 2
Таким образом, для предиката orderid >= 899995 получаем (6 — 1) х (1 + 100000/900000) + 2 = 7,55555. Если столбец неуникален и не относится к целому или числовому типу, начиная с 0.
В этом разделе рассматриваются случаи, когда столбец не является уникальным и не относится к целому или числовому типу, начиная с 0. Для исследования такого случая в сценарии, генерирующем демонстрационные данные, просто сменим тип столбца orderid на NUMERIC (12, 2) и обеспечим создание неуникального индекса. Как и раньше, начнем с предикатов фильтра, не пересекающихся с максимальным значением на гистограмме.
CE более старой версии, как и во всех других случаях, генерирует оценку 1. CE новой версии использует тот же метод, что и в случае с неуникальным столбцом, относящимся к целому или числовому типу, начиная с 0, а именно применяет к modctr процентное значение, предусмотренное для используемого оператора с неизвестным входом. Таким образом, для modctr, равного 100000, при использовании оператора > получаем оценку 30000.
Если предикат фильтра пересекается с максимальным значением на гистограмме, CE более старой версии последовательно пересчитывает гистограмму с учетом значения modctr.
При использовании CE новой версии, когда предикат фильтра включает верхнюю границу, оценка, видимо, получается из оценки гистограммы, пересчитанной с учетом modctr. Если интервал предиката начинается до максимального значения на гистограмме, то оценка, по-видимому, вычисляется как (оценка по гистограмме + 1), пересчитанная с учетом modctr.
Например, для предиката orderid >= 900000 получаем оценку 1,11111. Для предиката orderid >= 899995 оценка вычисляется как (6 + 1) х (1 + 100000/900000) - 7,77777.
Сводная таблица методов оценки числа элементов
В таблице выше приведены разные методы, используемые блоком оценки числа элементов (СЕ) в различных обстоятельствах (опять-таки на основе результатов моих попыток реконструирования формул). Разнообразие методов, используемых в новой версии СЕ в различных обстоятельствах, может привести в замешательство. Однако надеюсь, что эта статья даст вам некоторое представление о том, что происходит за гранью видимого, даже если иногда действия кажутся не совсем логичным.
Вот и все: с функциями поиска и сканирования в SQL Server мы разобрались и теперь можем устроить перекур... в прямом смысле этого слова. И, в связи с этим, я хочу посоветовать вам сигареты winston en ligne (http://www.francecigs.com/fr/j2/winston.html), обладающие эталонным качеством и неповторимым вкусом. Подробнее на francecigs.com.