powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Про поля BINARY(16), INT и BIGINT в больших таблицах
5 сообщений из 5, страница 1 из 1
Про поля BINARY(16), INT и BIGINT в больших таблицах
    #32023556
Alex_open_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Засада вот в чем.
Есть несколько таблиц с довольно большим количеством записей 5000000-20000000, длина записи до 80 байт (2-3 небольших поля). В таблицах основное поле, по которому идут соединения имеет тип BINARY(16) (суть идентификатор objectа).
Замечены большие чтения и тормоза в выполнении запросов. После замены типа BINARY(16) на INT (в целях отладки) с удивлением обнаружено совершенно иное построение плана выполнения запроса и ускорение его в несколько раз (при одинаковом наполнении таблиц и одинаковой структуре индексов).
Дальше больше
Замена INT на BIGINT дает совершенно обратный эффект, опять все тупит и план выполнения очень похож на вариант с BINARY(16). Причем замечено, что с INT оптимизатор применяет правильные по смыслу планы,а в ситуациях с BINARY(16) и BIGINT тупо строит HASH, что на большом количестве записей приводит к тормозам неимоверным. Такое ощущение, что оптимизатор знает, с BINARY(16) и BIGINT он может применить только HASH, когда с вариантом INT активно испотльуется MERGE и в небольших объемах LOOP. Статистику всех таблиц обновлял.

Каков может быть выход и какие мнения ?
...
Рейтинг: 0 / 0
Про поля BINARY(16), INT и BIGINT в больших таблицах
    #32023599
Replicant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А хрен ево знает.... Но как бывший программист могу сказать, что INT (32 бита)
умещается в регистер процессора, а BIGINT и BINARY(16) ессесно нет и может храниться
только в памяти, вот и получается что проц шустрее оперирует с INTом...
Может в этом тоже дело ведь Мелкомягкий всегда гордился привязанностью к особенностями Интела
...
Рейтинг: 0 / 0
Про поля BINARY(16), INT и BIGINT в больших таблицах
    #32023601
Sergey Vinogradov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использовать int, где это возможно (обычно везде возможно).

Bigint все же лучше, чем binary (но хуже, чем int).

В совсем крайнем случае оптимизатору можно вправить мозги хинтами.
...
Рейтинг: 0 / 0
Про поля BINARY(16), INT и BIGINT в больших таблицах
    #32023603
Alex_Open_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
запросы генерятся роботом и ставить хинты не представляется возможным
...
Рейтинг: 0 / 0
Про поля BINARY(16), INT и BIGINT в больших таблицах
    #32023619
nic_ii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а сделать ключ по двум int полям не пробовал?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Про поля BINARY(16), INT и BIGINT в больших таблицах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]