У нас есть требование реализовать таблицу (возможно, таблицу orable db или таблицу mssql db) следующим образом:
- В одном столбце хранится строковое значение, длина этого строкового значения сильно варьируется, обычно от нескольких байтов до 500 мегабайт (иногда более 1 гигабайта).
- Основываясь на вышеизложенном, мы решили использовать тип CLOB в db (использование системного файла как-то не вариант)
- Таблица очень большая, до нескольких миллионов записей.
- Одной из наиболее частых и важных операций с этой таблицей является поиск записей по этому столбцу CLOB, и строка поиска должна ТОЧНО соответствовать этому значению столбца CLOB.
Мой вопрос, помимо добавления индекса в столбец CLOB, нужно ли нам делать какую-то конкретную оптимизацию для повышения производительности поиска?
Один из членов моей команды предложил добавить дополнительный столбец, в котором можно вычислить хэш SHA-256 столбца CLOB выше и выполнить поиск по этому хеш-значению вместо столбца CLOB. По его мнению, основанием для этого является то, что хэш-значения имеют одинаковую длину, кроме переменной, поэтому индексация по ним ускоряет поиск.
Тем не менее, я не думаю, что этот способ имеет большое значение, потому что, если предположить, что добавление явного хэша улучшает производительность поиска, база данных должна быть достаточно умной, чтобы делать это самостоятельно, вероятно, сохраняя это хеш-значение в некоторых скрытых местах системы БД. Зачем нам, разработчикам, делать это явно, с другой стороны, это хеш-значение теоретически создает коллизию, хотя и редко.
Единственное преимущество, которое я могу себе представить, заключается в том, что когда клиентская сторона базы данных выполняет поиск по очень большому ключевому слову, вы можете уменьшить круговой обмен по сети, хэшируя это большое значение до значения небольшой длины, поэтому передача по сети происходит быстрее.
Так что любые гуру баз данных, пожалуйста, пролейте свет на этот вопрос. Большое спасибо!