Ну чтож, пример был сделан
Таблица Test. Содержит 301000 строк. Не спрашивайте почему 301000, а не 300000
Ну считаю я плохо...
CREATE TABLE Test (
[ID] int IDENTITY (1, 1) NOT NULL,
FloatField float NULL
)
1. Обработка данных в приложенииКусок кода приложения:
SqlDataReader reader = command.ExecuteReader();
DateTime start = DateTime.Now;
ArrayList arrayList = new ArrayList();
while (reader.Read())
{
if (!reader.IsDBNull(1))
{
arrayList.Add(reader.GetDouble(1));
}
else
{
arrayList.Add(-1);
}
}
reader.Close();
double milliseconds = (DateTime.Now - start).TotalMilliseconds;
milliseconds = 0;
]
При этом в таблице
а) Все строки "is null". При этом выполнение кода занимает примерно 700-750 миллисекунд
б) Каждая третья строка = 0, остальные NULLы. Время выполнения - в среднем 800-850 миллисекунд
2. Обработка данных в СУБДКак элегантно перевести NULLы в нули прямо в запросе SELECT я не понял, может вы мне подскажете...
Тогда решил сделать задачу попроще - во всей таблице поставил поля "= 0". Здесь, как и везде, поле ID никак не учитывается, вообще оно было введено только "для порядку"
Код приложения упростил:
SqlDataReader reader = command.ExecuteReader();
DateTime start = DateTime.Now;
ArrayList arrayList = new ArrayList();
while (reader.Read())
{
arrayList.Add(reader.GetDouble(1));
}
reader.Close();
double milliseconds = (DateTime.Now - start).TotalMilliseconds;
milliseconds = 0;
Результат меня удивил - 800-850, а то и все 900 с гаком миллисекунд!
Получается, что выгоднее обрабатывать NULLы в приложении. Заметьте, что это еще при том, что я не писал замену NULLов на нули в запросе, а просто в БД данные изменил.
Итак, проверки лучше проводить на клиенте, что и требовалось доказать
Еще раз прошу обратить внимание, что в моем примере не производилось преобразование данных в корректный вид базой данных, данные уже были корректными, т.е. NULLов не содержали