У нас есть требование реализовать таблицу (возможно, таблицу dable или таблицу mssql db) как следующим образом:Добавление явного столбца хеша SHA-256 для поля CLOB улучшает производительность поиска (точное совпадение) в этом поле CLOB
- Один столбец содержит значение строки, длина этой строки значения сильно варьируется, как правило, от нескольких байт до 500 мегабайтов (иногда за 1 гигабайт)
- Основываясь на выше, мы решили использовать CLOB type in db. (используя системный файл не является каким-либо образом)
- Стол очень большой до нескольких миллионов записей.
- Одной из наиболее частых и важных операций с этой таблицей является поиск записей по этому столбцу CLOB, а строка поиска должна EXACTlY соответствовать этому значению столбца CLOB.
Вопрос, помимо добавления индекса на столбец CLOB, нужно ли нам делать определенную оптимизацию для улучшения эффективности поиска?
Один из членов моей команды предложил добавить дополнительный столбец для вычисления SHA-256 хэша столбца CLOB выше и поиска по этому хеш-значению вместо столбца CLOB. По его мнению, основанием для этого являются хеш-значения, равные длине, отличные от переменной, так что индексирование на этом делает поиск быстрее.
Однако, я не думаю, что этот способ имеет большое значение, потому что, предполагая, что добавление явного хеша улучшает базу данных эффективности поиска, должно быть достаточно интеллектуальным, чтобы сделать это самим, вероятно, сохраняя это значение хэша в некоторых скрытых местах системы db. Зачем беспокоиться, что разработчики делают это явно, с другой стороны, это значение хэш-функции теоретически создает столкновение, хотя оно редко.
Единственное преимущество, которое я могу себе представить, - это когда клиентская база базы данных выполняет поиск, ключевое слово которого очень велико, вы можете уменьшить кругооборот в сети, хэшируя это большое значение на небольшое значение длины, поэтому передача сети происходит быстрее.
Итак, любые гуру базы данных, пожалуйста, проливают свет на этот вопрос. Большое спасибо!
Я ожидал бы, что индексирование будет быстрее по значениям переменной длины. Почему вы думаете, что равная длина лучше? – shmosel
Привет, shmosel, спасибо, что ответили.Я не знаю, какой из них быстрее, но мой товарищ по команде думает о преимуществах хэша, делая значения одинаковой длины и намного короче, чем исходные значения CLOB, чтобы индекс был быстрее. Я также подозревал, что это неправда. –
В зависимости от того, как реализованы строки, длина может быть первой строкой защиты при отказе от потенциального соответствия. Строки фиксированной длины заставляют индексатор начинать сравнивать их буквой. – shmosel