Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Запрос с большим количеством Replace  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
a_voronin,

Ваш .NET-код и время. Чтобы друг относительно друга можно было сравнить. Процессоры то у нас разные.

К сообщению приложен файл. Размер - 35Kb
25 июн 15, 13:35    [17815300]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
 declare 
	@y int= 0   
	,@a nvarchar(20) ='xxxx'
   ,@b nvarchar(20) = 'yyxx'
   ,@p nvarchar(20) = '%x%'
   set statistics time on
  select top (1000000)
  @y = case when @a like @p then 1 else 0 end
  ,@y = case when @b like @p then 1 else 0 end
  from sys.columns a , sys.columns b, sys.columns c
  set statistics time off
==============================
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 35 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 2684 ms,  elapsed time = 6185 ms.
25 июн 15, 13:37    [17815303]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
a_voronin,

извиняюсь. я выполнял с включенной кнопочкой показа актуального плана. время меньше...

К сообщению приложен файл. Размер - 26Kb
25 июн 15, 13:38    [17815312]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
churupaha,

шо и трубовалось в итоге доказать:)
25 июн 15, 13:39    [17815320]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
сори за спам картинками. чтобы видно было. что функции вызываются.

К сообщению приложен файл. Размер - 73Kb
25 июн 15, 13:42    [17815334]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Actual Executes = 1
25 июн 15, 13:48    [17815380]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
churupaha
a_voronin,

извиняюсь. я выполнял с включенной кнопочкой показа актуального плана. время меньше...


Однако
1) Сколько процессоров на SQL Server ?
2) Вы всё-таки используете .NET CLR
25 июн 15, 13:49    [17815390]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Maxx,

Чего вас так часто блокируют? Слишком сильно Майдан отстаиваете супротив оккупантов-москалей?
25 июн 15, 13:51    [17815404]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
churupaha
Actual Executes = 1

по дружбе прогони код с лайком 17815303..чтоб было честно и на одном железе?
Просто цикаво
25 июн 15, 13:52    [17815410]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Maxx
 declare 
	@y int= 0   
	,@a nvarchar(20) ='xxxx'
   ,@b nvarchar(20) = 'yyxx'
   ,@p nvarchar(20) = '%x%'
   set statistics time on
  select top (1000000)
  @y = case when @a like @p then 1 else 0 end
  ,@y = case when @b like @p then 1 else 0 end
  from sys.columns a , sys.columns b, sys.columns c
  set statistics time off
==============================
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 35 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 2684 ms,  elapsed time = 6185 ms.


Аналогично

К сообщению приложен файл. Размер - 40Kb
25 июн 15, 13:53    [17815413]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
a_voronin
Maxx,

Чего вас так часто блокируют? Слишком сильно Майдан отстаиваете супротив оккупантов-москалей?

ето все на что вас хватило в итоге ? Гы
Идите учите мат - часть
25 июн 15, 13:54    [17815420]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
a_voronin
Maxx,

Чего вас так часто блокируют? Слишком сильно Майдан отстаиваете супротив оккупантов-москалей?

ето все на что вас хватило в итоге ? Гы
Идите учите мат - часть
25 июн 15, 13:54    [17815424]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Maxx
churupaha
Actual Executes = 1

по дружбе прогони код с лайком 17815303..чтоб было честно и на одном железе?
Просто цикаво


Тоже Scalar Operator выполняется только 1 раз

К сообщению приложен файл. Размер - 9Kb
25 июн 15, 13:55    [17815432]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
a_voronin
Maxx,

Чего вас так часто блокируют? Слишком сильно Майдан отстаиваете супротив оккупантов-москалей?
[скрыт] <> [заблокирован]
25 июн 15, 13:55    [17815433]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1451
churupaha,

а у вас класс Regex что используется в сборке наследован тоже с System.Text.RegularExpressions?

Заинтересовался поскольку код a_voronin по сути использует тот же класс но разница во времени выполнения довольно существенна
25 июн 15, 13:56    [17815435]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
churupaha,

спасибо...ну все вроде честно
25 июн 15, 13:56    [17815438]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
felix_ff
churupaha,

а у вас класс Regex что используется в сборке наследован тоже с System.Text.RegularExpressions?

Заинтересовался поскольку код a_voronin по сути использует тот же класс но разница во времени выполнения довольно существенна


Вопрос в многопоточности. Её SQL Server задействовал автоматически.

Наш ответ Чемберлену

using System;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        const int UPPER = 1000000;
        const int MAX_THREADS = 32;
        static void Main(string[] args)
        {
            if (args == null) throw new ArgumentNullException("args");
            var s = @"Красная футболка адиддас";
            var s1 = @"совсем Красная футболка ";

            Stopwatch sw = new Stopwatch();
            sw.Start();
            Regex r = new Regex("((ади.*)(Кра))|((Кра.*)(ади))");

            Thread[] threads = new Thread[MAX_THREADS];
            for (int j = 0; j < MAX_THREADS; j++)
            {
                threads[j] = new Thread(() => 
                {
                    for (int i = 0; i < UPPER / MAX_THREADS; i++)
                    {
                        var x = r.IsMatch(s);
                        var x2 = r.IsMatch(s1);
                    }
                });
            }
            for (int j = 0; j < MAX_THREADS; j++)
            {
                threads[j].Start();
            }
            for (int j = 0; j < MAX_THREADS; j++)
            {
                threads[j].Join();
            }

            sw.Stop();
            Debug.WriteLine(sw.Elapsed);
        }
    }
}
25 июн 15, 14:01    [17815480]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
iap
a_voronin
Maxx,

Чего вас так часто блокируют? Слишком сильно Майдан отстаиваете супротив оккупантов-москалей?
[скрыт] <> [заблокирован]


Был [заблокирован]
25 июн 15, 14:02    [17815489]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
a_voronin
churupaha
a_voronin,

извиняюсь. я выполнял с включенной кнопочкой показа актуального плана. время меньше...


Однако
1) Сколько процессоров на SQL Server ?
2) Вы всё-таки используете .NET CLR


Это ноутбук

select cpu_count from sys.dm_os_sys_info


возвращает 8.

но план был однопоточный. дело в том, что умный оптимизатор понимает, что результаты одинаковы (у меня clr функции обертки регексов объявлены как deterministic) потому вычисляет только один раз.

но на реальной задаче никто не мешает мне подыграть оптимизатору так, что план будет параллельный. пачки строк будут обрабатываться регексами на разных потоках... без всяких ssis'ов (нисколько не умаляю его достоинств, но для разового разгребания помоек/мусорок, например, из которых надо выдрать что-то полезное и засунуть результаты в структуру - регексы без ssis'ов самое то...).
25 июн 15, 14:02    [17815490]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
churupaha
a_voronin
пропущено...


Однако
1) Сколько процессоров на SQL Server ?
2) Вы всё-таки используете .NET CLR


Это ноутбук

select cpu_count from sys.dm_os_sys_info


возвращает 8.

но план был однопоточный. дело в том, что умный оптимизатор понимает, что результаты одинаковы (у меня clr функции обертки регексов объявлены как deterministic) потому вычисляет только один раз.

но на реальной задаче никто не мешает мне подыграть оптимизатору так, что план будет параллельный. пачки строк будут обрабатываться регексами на разных потоках... без всяких ssis'ов (нисколько не умаляю его достоинств, но для разового разгребания помоек/мусорок, например, из которых надо выдрать что-то полезное и засунуть результаты в структуру - регексы без ssis'ов самое то...).


Я не против того, что CLR -- то круто. Вопрос в том, что заниматься очисткой строк средствами БД без .NET или другого языка -- вот что не круто.
25 июн 15, 14:04    [17815512]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Вопрос в многопоточности. Её SQL Server задействовал автоматически.

И этот человек нам рассказывает, насколько SSIS круче SQL Server-а
25 июн 15, 14:05    [17815514]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
a_voronin
felix_ff
churupaha,

а у вас класс Regex что используется в сборке наследован тоже с System.Text.RegularExpressions?

Заинтересовался поскольку код a_voronin по сути использует тот же класс но разница во времени выполнения довольно существенна


Вопрос в многопоточности. Её SQL Server задействовал автоматически.

Наш ответ Чемберлену

using System;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        const int UPPER = 1000000;
        const int MAX_THREADS = 32;
        static void Main(string[] args)
        {
            if (args == null) throw new ArgumentNullException("args");
            var s = @"Красная футболка адиддас";
            var s1 = @"совсем Красная футболка ";

            Stopwatch sw = new Stopwatch();
            sw.Start();
            Regex r = new Regex("((ади.*)(Кра))|((Кра.*)(ади))");

            Thread[] threads = new Thread[MAX_THREADS];
            for (int j = 0; j < MAX_THREADS; j++)
            {
                threads[j] = new Thread(() => 
                {
                    for (int i = 0; i < UPPER / MAX_THREADS; i++)
                    {
                        var x = r.IsMatch(s);
                        var x2 = r.IsMatch(s1);
                    }
                });
            }
            for (int j = 0; j < MAX_THREADS; j++)
            {
                threads[j].Start();
            }
            for (int j = 0; j < MAX_THREADS; j++)
            {
                threads[j].Join();
            }

            sw.Stop();
            Debug.WriteLine(sw.Elapsed);
        }
    }
}


многопоточностью вы SQL-щиков не удивите, причем у них это выйдет элегантнее... вот где я потеряю много, так это на маршалинге... хз как он сделан между unmanaged code sql server'a и sql clr... не копал за ненадобностью. и так устраивает.
25 июн 15, 14:06    [17815525]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
Вопрос в многопоточности. Её SQL Server задействовал автоматически.

И этот человек нам рассказывает, насколько SSIS круче SQL Server-а


Не правда. Я такого не рассказывал. Я говорил про Линкед Сервера и Очистку Строк. И что для каждой задачи есть свой инструмент.
25 июн 15, 14:07    [17815529]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Не правда. Я такого не рассказывал.

Конечно неправда. Это было ваше второе я.

a_voronin
И что для каждой задачи есть свой инструмент.

Дык и как же ваш SSIS мне запускать из клиентского приложения для получения результатов на экране ?
25 июн 15, 14:11    [17815553]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с большим количеством Replace  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
a_voronin
Вот вам код: 2 лимона регулярных выражений за 7.5 секунд
using System.Diagnostics;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var s = @"Красная футболка адиддас";
            var s1 = @"совсем Красная футболка ";

            int UPPER = 1000000;
            Stopwatch sw = new Stopwatch();
            sw.Start();
            Regex r = new Regex("((ади.*)(Кра))|((Кра.*)(ади))");
            for (int i = 0; i < UPPER; i++)
            {
                var x = r.IsMatch(s);
                var x2 = r.IsMatch(s1);
            }
            sw.Stop();
            Debug.WriteLine(sw.Elapsed);
        }
    }
}



результат
00:00:07.4231969
Этот ваш код у меня - 00:00:04.9745967
А теперь, как заказывали, то же самое на T-SQL с лайками:
declare @c int = 0, @dt datetime2 = sysdatetime(), @s1 nvarchar(100) = N'Красная футблолка адидас', @s2 nvarchar(100) = N'совсем Красная футболка',
        @b1 bit, @b2 bit;

while @c < 1000000
 select
  @b1 = case when @s1 like N'%Кра%ади%' then 1 else 0 end,
  @b2 = case when @s2 like N'%Кра%ади%' then 1 else 0 end,
  @c += 1;

select datediff(ms, @dt, sysdatetime()) / 1000.;
Результат - 4.489000
25 июн 15, 14:12    [17815558]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить