1) Правда ли, что для каждого индекса создается копия таблицы?
Частично. Столбцы, которые индексируются определенным (некластеризованным) индексом, будут «скопированы» в структуру данных индекса (обычно это B-дерево), а остальные столбцы - нет. Кстати, некоторые RDMBS поддерживают форму сжатия индексов (например, Oracle, не уверенный в MS SQL Server), которая может значительно «уменьшить» след индекса низкой селективности.
Что касается кластеризованного индекса, то таблица и индекс на самом деле имеют одинаковую структуру данных. Поэтому, если у вас есть только один индекс (т. Е. Просто первичный ключ), его кластеризация, как правило, уменьшает требуемое пространство по сравнению с классической комбинацией кучи B-дерева / таблицы, которую вы получаете из некластеризованного индекса.
Однако , кластеризованный индекс увеличивает «копирование», которое происходит для всех других (т.е. некластеризованных) индексов. Из MSDN:
"Значения ключей из кластеризованного индекса используются всеми некластеризованными индексами в качестве ключей поиска и, следовательно, хранятся в каждой записи листа некластеризованного индекса."
Если вы не можете избежать наличия множества индексов, хотя бы избавьтесь от кластера и используйте только некластеризованные индексы.
2) 32 индекса добавляют только 1,5 секунды для той же команды INSERT. Это среднее значение остается для 10000 строк? или для 80 индексов?
Имея только 3400 строк (или 10 000 в этом отношении), я подозреваю, что вы все еще находитесь в пределах кеша, что может скрыть проблему производительности, которую вы, вероятно, будете иметь, поддерживая все эти индексы для большего набора данных. Как всегда, вы не будете знать наверняка, пока не сравнитесь с репрезентативными объемами данных ...
--- РЕДАКТИРОВАТЬ ---
3) когда у нас есть внешний ключ в столбце, SQL Server автоматически создает некластерный индекс для него. Этот индекс полезен для запросов или объединений?
Может увеличивать или не увеличивать производительность в зависимости от того, как составлен конкретный запрос. Это также может быть важно для каскадной ссылочной целостности (ON DELETE / UPDATE CASCADE).
Если вы можете жить без этого индекса, его удаление увеличит производительность модификаций, как и при удалении любого другого индекса.