Каскадное падение производительности при удалении больших наборов данных, может ли это быть вызвано отсутствием индексации? - PullRequest
3 голосов
/ 01 ноября 2010

Я пишу некоторый код, который должен каскадно удалять записи в определенной базе данных, и я заметил снижение производительности, так как в базе данных больше записей.Когда я просто заполняю базу данных, кажется, что между началом заполнения и сразу в конце не наблюдается большого падения производительности, но когда я делаю каскадное удаление, производительность падает с большей базой данных.Я предполагаю, что для каскада потребуется много объединений, чтобы найти все связанные записи в других таблицах, что приводит к его замедлению на больших наборах данных.Но когда я просто добавляю запись, не нужно ли ей также проверять уже существующие первичные ключи и другие уникальные ограничения, и не нужно ли это медленнее в больших наборах данных, или это невероятно быстро по сравнению с процессом удалениячто трудно заметить падение производительности, когда вы просто заполняете базу данных?Или каскады просто медленные, потому что я специально не индексировал таблицы, к которым он относится?ключ?В более общем смысле: индексируются ли первичные ключи автоматически?

1 Ответ

3 голосов
/ 01 ноября 2010

Я предполагаю, что для каскадного поиска всех связанных записей в других таблицах потребуется много соединений, что приведет к замедлению работы с большими наборами данных.

Не думай. Включите ведение журнала Hibernate (в частности, средство ведения журнала для org.hibernate.SQL), чтобы увидеть точно , какие операторы SQL выполняет Hibernate. Затем принимайте решения и действуйте на основе фактов, а не предположений.

В более общем смысле: индексируются ли первичные ключи автоматически?

Да.

...