Индексы хеша SQL Server

Обязательно обновляйте массив при получении ввода, т. Е.

void getInput() {
    System.out.println("Enter number of rows:");
    mRow = input.nextInt();
    System.out.println("Enter number of columns:");
    nColumn = input.nextInt();
    a = new int[mRow][nColumn]; // you need this line
}
10
задан Cade Roux 25 November 2008 в 23:34
поделиться

4 ответа

Хорошо, 2 точки.
Функция КОНТРОЛЬНОЙ СУММЫ SQL не производит значение хэш-функции. Это на самом деле вычисляет значение CRC. Это не очень хороший кандидат для базирования, хеш проверяют becuase будет relativly большое количество коллизий. Необходимо проверить функцию hash_bytes, если Вы хотите хеш-функцию.
Во-вторых, Вы на самом деле не создаете индекс хеша. Вы создаете нормальное B-дерево на значении хэш-функции, таким образом, время поиска будет точно тем же что касается любого другого индекса B-дерева на подобном размерном типе данных.
Существует шанс, что Вы могли получить немного производительности при помощи CRC или хеша длинного значения varchar для разрешения сравнений меньшего числа байтов, но сравнение строк только проверяет столько байтов, сколько это должно, который является до первого символа, который не соответствует, и если Вы действительно соответствуете на хешированном значении, затем необходимо проверить фактическое значение дважды так или иначе. Таким образом, если у Вас нет большого количества очень похожих строк, Вы, вероятно, закончите тем, что сравнили БОЛЬШЕ байтов при помощи хеша (или CRC).

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

В случае, если Вы заботитесь, Ingres (CA) может создать индексы хеша, которые были бы затем achive O (1). может быть другой RDBM's там, которые также поддерживают истинные индексы хеша.

12
ответ дан 3 December 2019 в 20:07
поделиться

Я не думаю, что SQL-сервер исходно имеет основанный на хеш-таблице индекс. Документация BOL говорит о создании стандартного (древовидного) индекса на расчетном значении. Это не то же самое как Линейная Хеш-таблица, которая является индексной структурой, доступной на некоторых платформах DBMS, но не SQL Server (AFAIK).

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

6
ответ дан 3 December 2019 в 20:07
поделиться

Можно попытаться настроить вещи использовать хэширование, можно посмотреть на план выполнения, чтобы проверить, что хэширование на самом деле используется. Когда хэширования будут использоваться, SQL Server все еще создаст хеш-таблицу сначала как часть выполнения отдельного запроса. Я полагаю, что индексы никогда не хранятся как хеш, только как деревья.

В целом я не создал бы искусственный столбец хеша, если Вы не делаете точные совпадения против потенциально больших строк или двоичных блобов (как pipTheGeek упоминания). Я просто хотел добавить, что иногда это необходимо, поскольку строки могли бы быть слишком большими для помещений в индексный ключ. Существует предел размеру индексных ключей, я думаю 2k для SQL Server.

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

1
ответ дан 3 December 2019 в 20:07
поделиться

Нет никакого преимущества для поиска индексируемой КОНТРОЛЬНОЙ СУММЫ по кластерному индексу на поле ID, если поле ID является интервалом, так как оба сделают, кластерный индекс ищет. Кроме того, КОНТРОЛЬНАЯ СУММА международного столбца всегда возвращает то же значение как столбец (т.е. Контрольная СУММА (535) = 535). Однако поиск КОНТРОЛЬНОЙ СУММЫ будет обычно работать лучше, если идентификатор будет длинным символьным столбцом.

0
ответ дан 3 December 2019 в 20:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: