Здравствуйте, Аноним, Вы писали:
А>Нужно перевести строку вида "0fad933379d52044" в int (bigint). Средствами базы данных.
А>Желательно без сложной хранимой процедуры....
Без хранимки не получится. В
стандартных строковых функциях ничего полезного нет. Так что что-нибудь написать придется. Просуммировать коды символов с коэффициентами, например. Может быть (если архитектура позволяет) вообще вычислять на стороне клиента а не базы.
А>По идее субд должна бы сама деелать эффективный хеш, и искать строку так же быстро как и int8, но по каким-то причинам этого не делает.
А у вас индекс то как создан? Хэшированный или обычный BTree? Если вдруг решите использовать хэш-индекс, внимательно читайте документацию. Вроде бы есть какие-то неочевидные ограничения и подводные камни.
А>Посоветуйте или как правильно отиндексировать табличку, или способ как мне из md5(some_txt_key) получить int8.
explain analyze для вашего запроса покажите (или хотя бы обычный explain). Может, селективность индекса плохая получается. Или он не анализируется/не обновляется статистика. Эти две причины приведут к тому, что индекс не используется. Или ваши 150 символов приходится в индекс с диска таскать часто, например.
Можете для вашего md5 посчитать какой-нибудь crc восьмибитный. Но лучше бы crc считать по исходным данным либо по бинарному представлению md5, а не по его текстовому представлению (текстовое представление распределено "плохо").