(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

MS SQL 2008, заметки на полях. Очень много случайных чисел

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

 Всех кого заинтересовала тема, добро пожаловать под кат...

Задачка: на 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 как атом).

 Перепишем запрос.
 Будем вставлять не по одной записи, а по 2000 за раз.
 Решение не сильно отличается от предыдущего, но получаем огромное увеличение производительности.

 
У меня на запрос ушло 48 секунд.
 (Если предположить что наше решение в 2000 раз стало быстрее, но предыдущее выполнялось бы более 26 часов).
 

Решение 3.
 Можно ли еще увеличить производительность?
 Посмотрим на скрипт, WHILE.
 Чтобы от него избавиться, нам нужно таблица содержащая как можно большее количество чисел - в идеале равное 10000000.

 Роем google - "CROSS JOIN" и "WITH".

 Нам понадобиться таблица простых чисел:

 
 
из которой мы создадим таблицу содержащую необходимый набор чисел:
 
 
и наконец добавляем результат 
 
 

Запрос выполнился за менее чем 34 секунды.

Какое решение выбрать?
 Конечно не используем решение в лоб. То есть решение 1, можно спокойно отдать истории "как не надо делать".

 Разница между решением 2 и решением 3 не так очевидна. Простота против скорости. Какое из них использовать - зависит от конкретной ситуации и что будет проще поддерживать и расширять в будущем.

 

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 25.10.2011 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office 365 Профессиональный Плюс. Подписка на 1 рабочее место на 1 год
Microsoft Office 365 Бизнес. Подписка на 1 рабочее место на 1 год
Microsoft 365 Business Basic (corporate)
Microsoft 365 Apps for business (corporate)
Microsoft Windows Professional 10, Электронный ключ
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Мастерская программиста
Работа в Windows и новости компании Microsoft
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100