(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 не так очевидна. Простота против скорости. Какое из них использовать - зависит от конкретной ситуации и что будет проще поддерживать и расширять в будущем.

 

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


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Microsoft »
Обсудить материал в конференции Дизайн, графика, обработка изображений »
Написать редактору 
 Рекомендовать » Дата публикации: 25.10.2011 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft SQL CAL 2017 Sngl OLP 1License NoLevel DvcCAL
Microsoft Visual Studio Professional w/MSDN AllLng License/Software Assurance Pack OLP 1 License No Level Qualified
Microsoft Office 365 Бизнес премиум. Подписка на 1 рабочее место на 1 год
Microsoft System Center Standard Core Sngl License/Software Assurance Pack OLP 2Licenses NoLevel CoreLic Qualified
Microsoft SQL Server Standard Edition 2017 Sngl OLP 1License NoLevel
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Утиль - лучший бесплатный софт для Windows
Программирование на Visual С++
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Отличается ли ДрифтКазино от беттинга? (9)
Друзья, давно заметил, что на Дрифте уже несколько месяцев во всю рекламируется и предлагается...
 
Windows 10 загружен процессор (2)
Добрый день! На рабочем ПК Windows 10, компьютер тормозит, в диспетчере задач выдает что диск...
 
ErWin to Access Relation Error (2)
Всем привет! ErWin при попытке генерации в Ассеss выдаёт: ERwinDatabase.Relations.Append...
 
Помощь по MS Access (331)
Доброе время суток. Случайно оказался на этом сайте, искал статьи по OLAP. Вижу, что...
 
Смена типа уровня модели (1)
Здравствуйте. При запуске программы выбрал уровень "Логический" вместо "Логический и...
 
 
 



    
rambler's top100 Rambler's Top100