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

Откуда: и куда идёт сей путник нам не ведомо
Сообщений: 118
Имеется допустим 10 000 записей ntext там строка чисел с разделителем. Итак, уважаемые знатоки, вопрос:

как осуществить выборку допустим 25 элемента с 1 000 до 2 357 записи.

Сам забивал в массив строки с помощью клиента ну а потом выборка по массиву массивов. цикл в цикле циклов. тормоза жутчайшие.

Есть идеи как на ХП сделать ?
10 дек 03, 09:22    [454205]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
Nikulin
Member

Откуда: Королевство
Сообщений: 902
Ну так с помощью серверного курсора. Выбираешь строки в курсор.
Затем FETCH ABSOLUTE 1000.

А далее в цикле FETCH RELATIVE 1 до 2 357 записи.
10 дек 03, 09:33    [454230]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
Nikulin
Member

Откуда: Королевство
Сообщений: 902
Серверный курсор созданный с помощью T-SQL, я имею ввиду. А возвращать рез-т наверное можно с помощью table.
10 дек 03, 09:36    [454236]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
ОпломбOFF
Member

Откуда: и куда идёт сей путник нам не ведомо
Сообщений: 118
а почитать про Это где можно
под рукой нет ничего
а идея вроде классная
10 дек 03, 09:39    [454243]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
Nikulin
Member

Откуда: Королевство
Сообщений: 902
В Help'e самого SQL Server'a -> Books Online
Это хелп который ставиться с самим сервером или с клиентскими утилитами.
Очень замечательная вешчь!!! Правда на English'e.
10 дек 03, 09:43    [454247]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
вот только не советую через курсор выбирать переменные, помимо поля ИД, очень сильно тормозит работу, тем более если будешь выбирать поля с ntext

для спящего время бодрствования равносильно сну
10 дек 03, 09:50    [454254]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
ОпломбOFF
Member

Откуда: и куда идёт сей путник нам не ведомо
Сообщений: 118
там тоько два поля - время и строка данных
10 дек 03, 09:52    [454256]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
Nikulin
Member

Откуда: Королевство
Сообщений: 902
А строки с 1000 по 2357 запись не имеют подходящего критерия для того чтобы их выбрать в одном селекте? Мб по дате или части строки?

Тогда можно было бы элементарно обойтись одним селектом....
10 дек 03, 09:59    [454274]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
либо написать функцию.... типа udf_get_item(ntext_str, 25) и обойтись "одним" селектом....
для примера гляньте Массивы и Списки в SQL Server, но это всеравно криво... если возможно - измените структуру...
10 дек 03, 10:06    [454289]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
если использовать курсор типа:
declare cur cursor for select dat, sometext from sometable

open table
fetch next from cur into @dat, @sometext

он будет работать дольше, чем:
declare cur cursor for select dat from sometable

open table ...
fetch next from cur into @dat
select @sometext = somtext from sometable where @dat = dat


для спящего время бодрствования равносильно сну
10 дек 03, 10:06    [454290]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
ОпломбOFF
Member

Откуда: и куда идёт сей путник нам не ведомо
Сообщений: 118
строка - массив чисел real с разделителем
больше тысячи в одной строке
ей соответствует поле даты
вот и всё

пишется быстро (за минуту раз 8 -10 надо успеть скинуть данные)
места мало занимает
а вот с выборками тормоза

не понимаю как SELECTом выбрать 40-е значение во всех строках за прошлые сутки например ?
10 дек 03, 10:09    [454300]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
строка - массив чисел real с разделителем
больше тысячи в одной строке
ей соответствует поле даты
вот и всё


Ну и кто вас надоумил так данные хранить??? Вот отсюда ваши проблемы.

автор
не понимаю как SELECTом выбрать 40-е значение во всех строках за прошлые сутки например


И что означает 40 значение? Всмысле почему именно по номеру вы его хотите вытащить?
10 дек 03, 10:13    [454311]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
Nikulin
Member

Откуда: Королевство
Сообщений: 902
не понимаю как SELECTом выбрать 40-е значение во всех строках за прошлые сутки например ?

Ну так ептить!!!!


Select substring(some_text_field, 40, 1) from table1
where datepart(year, date1) = datepart(year, getdate()) and
datepart(month, date1) = datepart(month, getdate()) and
datepart(day, date1) = datepart(day, getdate()-1)

Ну ограничение по дате надо доработать....
10 дек 03, 10:18    [454329]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31598
2ОпломбOFF

В БД такое плохо решать, с хранением инфы в тексте и с последующим разбором. Это у вас не задача базы данных, её (базы данных) принципы, т.е. реляционная работа ч множествыми, здесь не используются.

Качайте данные на клиента, и делайте, что надо. На С/С++ будет очень быстро.
10 дек 03, 10:18    [454332]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
Nikulin
Member

Откуда: Королевство
Сообщений: 902
Да насчет способа хранения это классно придумано....
10 дек 03, 10:19    [454337]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
ОпломбOFF
Member

Откуда: и куда идёт сей путник нам не ведомо
Сообщений: 118
надоумил опыт сын ошибок вместе с пивом

попробуйте записать в базу скажем 1 000 (у нас побольше будет)
чисел типа real
и так 12 раз в минуту, т.е. меньше секунды на каждую запись, пишется одним клиентом.
если строка то всё успевается

а 40-е к примеру значение это цифра от источника номер 40
вот и всё
просто как мир
внутрь проги влезть не могу
буржуины придумали
понадобилось свой генератор отчётов на этих данных
вот
10 дек 03, 10:20    [454338]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
Nikulin
Member

Откуда: Королевство
Сообщений: 902
Ну раз очень хочеться реализовать выборку на сервере то решение мб такое.

Выбирать в хп данные в курсор. Далее цикл по курсору и с помощью user defined function выбирать из строки определенное значение типа реал по его порядковомму номеру в строке.
10 дек 03, 10:36    [454394]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
Курсор-то накой... быстрее чтоль будет?
10 дек 03, 10:37    [454399]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
т.е. меньше секунды на каждую запись


Скока, скока на одну запись??? 8-) Дык это сумасшедшее времы.

CREATE TABLE Table1(col1 real)

GO

DECLARE @StartTime datetime, @Counter int
SET @Counter = 1
SET @StartTime = GETDATE()
WHILE @Counter <= 1000 BEGIN
INSERT INTO Table1 VALUES(@Counter)
SET @Counter = @Counter + 1
END
SELECT DATEDIFF(ms, @StartTime, GETDATE())
GO

DROP TABLE Table1


У меня 436 миллисекунд ушло на это. Правда это чисто серверное время, а у вас клиент вставляет. Можно что с клиента посылать строку в хп, например, а там ее парсить на числа и в базу позаписно пихать.
10 дек 03, 10:38    [454400]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
Nikulin
Member

Откуда: Королевство
Сообщений: 902
Да нет курсор конечно будет медленне простого селекта.

автор
как осуществить выборку допустим 25 элемента с 1 000 до 2 357 записи


Но как он выберет записи с 1 000 до 2 357 для которых нет единого критерия для выборки в одном селекте??? Только через курсор.
10 дек 03, 10:49    [454427]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
Tracer
Member

Откуда:
Сообщений: 728
автор
Имеется допустим 10 000 записей ntext там строка чисел с разделителем. Итак, уважаемые знатоки


Имхо тут только extended sp поможет. Быстрее всего будет.
10 дек 03, 10:59    [454453]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
в функции парсим строку... 1-й раз-ль, 2-й... 25-й стоп... return ...

select id, dbo.udf_get_item(ntext_str, 25) from tbl where ...
10 дек 03, 11:00    [454459]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
ОпломбOFF
Member

Откуда: и куда идёт сей путник нам не ведомо
Сообщений: 118
У меня 436 миллисекунд ушло на это. Правда это чисто серверное время, а у вас клиент вставляет. Можно что с клиента посылать строку в хп, например, а там ее парсить на числа и в базу позаписно пихать.

клиент вставляет одну запись ntext уже готовую которую ему отдали уже другие проги
и так 8 - 12 раз в минуту
успевает

а на числа я парсил

структура таблицы ID,DateTime,real
прирост 500 Мб в сутки
отчёты глубиной 10 суток
5 Гб база
а если срок хранения квартал или год ?
вот
10 дек 03, 11:12    [454487]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
OLAP ?
10 дек 03, 11:14    [454493]     Ответить | Цитировать Сообщить модератору
 Re: Знатокам ХП посвящается  [new]
ОпломбOFF
Member

Откуда: и куда идёт сей путник нам не ведомо
Сообщений: 118
он самый O...LAP
10 дек 03, 11:15    [454497]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить