Мне просто интересно, почему эти простые числа используются в методе класса hashCode ()
? Например, при использовании Eclipse для создания моего метода hashCode ()
всегда используется простое число 31
:
public int hashCode() {
final int prime = 31;
//...
}
Ссылки:
Вот хороший учебник по Hashcode и статья о том, как работает хеширование, которое я нашел (C #, но концепции можно передавать): N соединяют таблицы с достаточно большим количеством записей, в дополнение к составному индексу я добавляю второй, неуникальный индекс во второй столбец.
Это хорошая идея для SQL Server?
(Может быть, это не так. хорошая идея в Jet?)
Те же правила применяются в SQL Server. Если у вас есть индекс для (ColumnA, ColumnB), запрос только для ColumnA или ColumnA и ColumnB вместе может использовать индекс, но запрос только для ColumnB не может. Если есть необходимость присоединиться только к ColumnB, то обязательно нужно создать index.
Чтобы помочь вам больше, просто подсказка, в SQL Server с помощью студии управления вы можете оценить производительность с помощью «Показать предполагаемый план выполнения». Он показал, как работают индексы и соединение.
Также вы можете использовать DTA (советник по настройке ядра базы данных) для получения дополнительной информации и оптимизации.
Если у вас есть составной индекс по столбцам (A,B)
, никакие операции поиска, сканирования диапазона, сортировки или агрегирования не могут использовать его для выражений, содержащих только Б
.Это верно для SQL Server, так же как и для драйверов Jet (Red) (и я думаю, что и для Jet Blue). Некоторые другие движки могут использовать его в так называемой операции skip scan
.
Таким образом, ответ заключается в том, что вам нужны отдельные индексы только для (B)
.