У вас есть ситуация, когда составной ключ имеет два компонента. Первый - 4 байта, а второй - 4 байта. Общий ключ - 8 байтов.
Индекс первичного ключа сгруппирован, что означает, что «листы» b-дерева являются самими фактическими записями. Кластеризованный индекс будет быстрее получать доступ к другим типам индексов.
Одним из показателей эффективности индекса является размер ключа (а также дополнительные столбцы, хранящиеся в индексе). Индекс с 4-байтным ключом будет меньше индекса с 8-байтовым ключом. Это означает меньшее использование диска и меньшее количество памяти в памяти. Однако выгоды здесь могут быть довольно маленькими. В конце концов, миллион строк в таблице будет соответствовать не более 10-20 миллионов байт (индексы имеют дополнительные накладные расходы в них).
Еще одно соображение - это выполнение шагов модификации данных. В кластерном индексе вставка/изменение значения ключа в середине таблицы требует повторной записи самих записей. Тем не менее, вы сомневаетесь, что это не изменение адресных данных.
Если вы уже определили индекс первичного ключа, то добавление другого индекса - дополнительные накладные расходы для системы. Вы можете обнаружить, что индексы занимают память, поэтому вместо экономии места вы фактически добавляете к нему.
В конечном счете, ответ на этот довольно загадочный вопрос - это сделать некоторые временные тесты. Если столбец B
был намного больше, чем компонент A
, я мог бы увидеть некоторые выигрыши. Для запросов, которые только использовать A
, я мог бы увидеть некоторые выгоды. Тем не менее, я предполагаю, что такие достижения будут минимальными.
Если вы выполнили запрос только на A, тогда индекс для A и B не будет использоваться, afaik. – sevenseacat
@sevenseacat вам лучше прочитать о самом левом правиле :) –
звучит так, как мне кажется. – sevenseacat