|
Навигация
|
Главная » Sql Использование хэш-ключей вместо строковых индексов в SQL ServerИсточник: cyberguru Вашему приложению может потребоваться индекс на основе длинной строки символов или, что еще хуже, конкатенации двух строк или строки и одного-двух целых чисел. Для небольшой таблицы вы можете не заметить какого-либо отрицательного влияния такого индекса. Но если предположить, что рассматриваемая таблица содержит 50 миллионов записей? Теперь вы не сможете не заметить воздействия, которое скажется как на требованиях к хранению, так и к производительности поиска. Однако вам не обязательно так поступать. Есть очень простая альтернатива, использующая то, что еще известно под названием хэш-блоков или хэш-ключей.Что такое хэширование? Говоря коротко, хэширование - это целочисленный результат алгоритма (известного как хэш-функция), применяемого к заданной строке. Вы передаете в алгоритм строку, а на выходе получаете целое число. Если Вы используете эффективную хэш-функцию, то вероятность того, что две различных строки дадут одно и то же значение хэш-функции, будет невелика. Такой случай известен под названием коллизии хэширования. Предположим, что Вы применили к этой статье алгоритм хэширования, затем изменили один символ в статье и повторили алгоритм: он возвратил бы другое целое число. Хэш-ключи в проекте базы данных Как бы теперь грамотно применить хэш-ключи в наших проектах баз данных? Предположим, что интересующая нас таблица имеет следующие столбцы:
Основной процесс состоит в следующем:
Алгоритмы хэширования, использующие функцию Checksum Есть несколько доступных алгоритмов, простейший из которых встроен в SQL Server в форме функции Checksum . Например, следующий запрос демонстрирует получение хэш-ключа для любого заданного значения или комбинации значений: USE AdventureWorksЭтот код приводит к следующему результату (для краткости показаны только 10 строк):
Используя этот метод, Вы могли бы решить проблему следующим образом, предполагая, что целью поиска являются значения в Name и GroupName : CREATE PROCEDURE DemoHashЗаключение Этот подход может дать значительный прирост производительности, и я настоятельно советую вам протестировать этот метод на вашей собственной системе. Представленный метод предполагает, что поиск ограничивается одной таблицей, что может не всегда иметь место. Я пока еще экспериментирую со способами применения этой техники для поиска в соединенных таблицах, и когда я найду лучший подход, то дам вам знать. Утилита SQL*Plus. Создание и выполнение сценариев. Часть III. Особенности использования таблиц, организованных по индексу. Анализ результатов tkprof. Использование хранимых шаблонов при настройке приложений с недоступным исходным кодом. Уровни изолированности транзакций. Главная » Sql |
© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено. |