Из моего приложения ASP.NET, использующего EF Core, я получаю запрос к базе данных, которая содержит довольно много соединений (13). Когда я его выполняю, это работает - но на это уходит 25 секунд.
Однако, когда я использую «Legacy Cardinality Estimate» в опциях базы данных, выполнение происходит мгновенно. Как я понимаю, оценка мощности выполняется на основе статистики, поэтому я выполнил exec sp_updatestats
. Хотя однажды это помогло на том же БД (но другой запрос), на этот раз это не так.
Поэтому первый вопрос, который мне приходит в голову: как мне проверить правильность статистики? И если они таковы, то почему оценщик кардинальности сделает неправильный выбор?
Или в более общем плане: как мне подойти к этой проблеме, не прибегая к вышеупомянутой опции (включение чего-то устаревшего не звучит правильно)?