У меня есть таблица в SQL Server примерно с 400 000 строк. К сожалению, в этой таблице много повторяющихся строк, так как нет первичного ключа. я использую SELECT DISTINCT
чтобы получить все уникальные строки, но поскольку их так много, я продолжаю получать ошибки тайм-аута. Как лучше всего подойти к этой проблеме?
Хороший вопрос. Улучшить тайм-аут - поднять значение. Или добавьте больше мощности. Технически 400 000 строк - это немного, так что для приличного сервера это будет очень быстро. В противном случае - если у вас проблемы с вводом-выводом из-за того, что на вашем «сервере» только один (пара) жестких дисков .... тогда ваш ввод-вывод убьет вас.
По сути, DISTINCT инициирует создание временного результата в базе данных tempdb, поэтому она является тяжелой для базы данных tempdb.
Но в конце я бы увеличил таймаут, особенно если это единовременная операция.
Кстати, чтобы представить это в перспективе - где вы говорите о большом столе? 400.000 - это банально по размеру.
Лучшее решение для ускорения этого - добавить индекс в поле, которое вам нужно выбрать. Использование оператора select, в котором ядро базы данных должно фильтровать результаты без индекса, по существу требует, чтобы сервер прошел по каждой строке в таблице.