MS SQL 2008, заметки на полях. Очень много случайных чиселИсточник: habrahabrru
В решении многих задач необходимо вставить большое количество подобных строк, содержащие заранее заданную информацию, например тестирование слабых мест в приложении. Основной сложностью является ни столько алгоритм создания данных, сколько механизм позволяющий создать такое количество строк. Всех кого заинтересовала тема, добро пожаловать под кат... Задачка: на MS SQL 2008, добавить в таблицу 10000000 (десять миллионов) случайных простых чисел от 1 до 100 000. И хотелось бы сделать это как можно быстрее. Решение 1. На моей машине (CPU: AMD Phenom II X2 550/RAM: 8Gb/HDD: WD5000AAKS/MS SQL2008R2/Win7x64), когда время выполнения превысило 25 минут запрос пришлось прервать.
Решение 2. Немного поразмыслив и полистав google находим интересную таблицу master..spt_values (не иссякаем MS SQL как атом). Перепишем запрос. У меня на запрос ушло 48 секунд.
(Если предположить что наше решение в 2000 раз стало быстрее, но предыдущее выполнялось бы более 26 часов). Решение 3. Роем google - "CROSS JOIN" и "WITH". Нам понадобиться таблица простых чисел: из которой мы создадим таблицу содержащую необходимый набор чисел:
и наконец добавляем результат
Запрос выполнился за менее чем 34 секунды. Какое решение выбрать? Разница между решением 2 и решением 3 не так очевидна. Простота против скорости. Какое из них использовать - зависит от конкретной ситуации и что будет проще поддерживать и расширять в будущем. |