Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Про поля BINARY(16), INT и BIGINT в больших таблицах / 5 сообщений из 5, страница 1 из 1
20.02.2002, 15:57
    #32023556
Alex_open_m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про поля BINARY(16), INT и BIGINT в больших таблицах
Засада вот в чем.
Есть несколько таблиц с довольно большим количеством записей 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
21.02.2002, 07:17
    #32023599
Replicant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про поля BINARY(16), INT и BIGINT в больших таблицах
А хрен ево знает.... Но как бывший программист могу сказать, что INT (32 бита)
умещается в регистер процессора, а BIGINT и BINARY(16) ессесно нет и может храниться
только в памяти, вот и получается что проц шустрее оперирует с INTом...
Может в этом тоже дело ведь Мелкомягкий всегда гордился привязанностью к особенностями Интела
...
Рейтинг: 0 / 0
21.02.2002, 07:27
    #32023601
Sergey Vinogradov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про поля BINARY(16), INT и BIGINT в больших таблицах
Использовать int, где это возможно (обычно везде возможно).

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

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


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