для первого а) индекс соединения будет лучший
На каких колонках? Фамилия + имя, имя + фамилия? Приказ может иметь значение. В этом случае это, вероятно, не имеет значения, но обычно вы хотите рассмотреть все приложение и подумать о том, как вы обычно будете выполнять поиск. Например, если у вас есть другой запрос, который просматривает только по одной фамилии, вы должны обязательно поместить столбец фамилии сначала в индекс, чтобы этот индекс работал для обоих запросов. Переиндексация может быть почти такой же низкой, как и при индексировании.
кластерный лучше для второго
Опять же, вам необходимо рассмотреть всю таблицу/приложения при выборе индексов. У вас может быть только один кластеризованный индекс в таблице. Весьма вероятно, что ваш кластерный индекс должен находиться в столбце EmployeeID. Даже если мы не видим никаких запросов, использующих его здесь, это наиболее распространенная потребность. Регулярный индекс зарплаты, вероятно, достаточно хорош здесь.
многораздельная для третьего
регулярный индекс Оклад, вероятно, будет достаточно хорошо. База данных сможет перейти к первой записи, а затем «ходить по индексу», пока она больше не будет соответствовать. Но это зависит от размера таблицы ... если таблица огромная (в 10 и 100 миллионы строк), разбиение может иметь смысл (обычно на самой таблице). Я не знаю многих предприятий, которые имеют 10 миллионов сотрудников. Опять же, одна вещь, которую мы хотим сделать, - избегать чрезмерной индексации, и поэтому повторное использование того же индекса из б) является хорошим.
какой-то сгруппированы в (г
Это зависит от двигателя и версии базы данных, но это вряд ли какой-либо индекс сам по себе поможет этот запрос. Причина заключается в том, что выражения очень часто не sargable, то есть оптимизатор запросов не будет достаточно умен, чтобы знать, если индекс будет работать или нет. То, что вы можете сделать, это создать
computed column
virtual column и поставить индекс по этому столбцу.
I во всех случаях, поскольку вы запрашиваете только столбец EmployeeID, вы хотите добавить EmployeeID в индекс, но на самом деле не индексируете это поле. Просто INCLUDE столбец с индексом.Таким образом, база данных сможет полностью выполнить ваш запрос только из индекса, не возвращаясь к таблице. Причиной просто включить столбец, а не индексировать его, является улучшение производительности инструкций INSERT/UPDATE, чтобы избежать необходимости перестроить индекс.
Привет Joel, ваша ссылка на вычисляемых столбцах для SQL Server. Это ошибка? Я полагаю, вы имели в виду «виртуальные столбцы» для оракула: http://www.oracle-base.com/articles/11g/virtual-columns-11gr1.php – Sebas
@Sebas Я пропустил тег oracle, отвечал главным образом на понятия. Похоже, что INCLUDE - это то, что Oracle не делает. –
Я не уверен, что ваши заметки о «clusterd indexes» применимы, поскольку упоминается только одна таблица. –