Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск дыр (ускорение), oracle 
:(
    Опции темы
ziga
Дата 2.2.2011, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



есть таблица с абонентами на данный момент там 600 000 записей эта цифра будет рости постоянно, есть поле ЛС поставщика услуг написан запрос который ищит дырки в последовательности ЛС ПУ т.е.  идёт так

10000001 (поле варчар2)
10000002
10000233

запрос ищет дырку и вернёт значение 10000003, при малой нагрузки на сервак запрос отрабатывает за 2,5 сек надо быстрее smile кто нибуть может подсказать как это сделать? вот запрос:

Код

select  min(x)
from (
select x
  from (select *
          from (select b + 1 x
                  from (select nm_acc a,
                               (lag(nm_acc) over(order by nm_acc)) b
                          from ssp_abonent a
                         order by nm_acc)
                 where a - b <> 1)
         where x not like '%666%')
 where rownum < 2
 union all
 select max(nm_acc)+1 from ssp_abonent
 ) t

PM MAIL   Вверх
Zloxa
Дата 2.2.2011, 10:57 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(ziga @  2.2.2011,  10:29 Найти цитируемый пост)
отрабатывает за 2,5 

а ведь это еще не конец... 

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

Предлженая вами реализация - полная ж. Руки туда совать не приятно.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Deniz
Дата 2.2.2011, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



Цитата(Zloxa @  2.2.2011,  12:57 Найти цитируемый пост)
Предлженая вами реализация - полная ж. Руки туда совать не приятно. 
 smile 

ziga, реализация действительно ...
Поиск первой свободной дырки (если мы говорим о БД), гораздо проще, например как-то так:
Код
select t1.nm_acc+1
from table t1
  left join table t2 on t1.nm_acc = t2.nm_acc + 1
where (t2.nm_acc is null)
  and (rownum = 1)
order by t1.nm_acc



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Akina
Дата 2.2.2011, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Deniz, ты забыл, что у него ещё эти ИДы хранятся как СТРОКИ...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 2.2.2011, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @  2.2.2011,  15:40 Найти цитируемый пост)
ещё 

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

еще абсурда добавляет то, что оракл - версионик и не блокирует по чтению, потому появляется возможность что дважды будет возвращен один и тот же айдишник. А т.к. вопрос достаточно тормозной, получается что это не просто возможно а весьма вероятно.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Deniz
Дата 2.2.2011, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



Цитата(Akina @  2.2.2011,  17:40 Найти цитируемый пост)
Deniz, ты забыл, что у него ещё эти ИДы хранятся как СТРОКИ... 
это я потом увидел, но привести к инту наверное можно, хотя ...

ziga, и опять поднимается вопрос о целесообразности поиска этих "дырок".


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
ziga
Дата 2.2.2011, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Цитата(Zloxa @  2.2.2011,  10:57 Найти цитируемый пост)
если вы не можете убедить заказчика в абсурдности задачи и  не соответствии профита от непрерывной нумерации издержкам на ее реализацию, введите систему резерирования номеров лицевых счетов. Сформируйте табличку, которую заблаговременно наполните непрерывными номерами на десятки лет вперед, и устанавливайте статус номеру - занятый, свободный. Первый попавшийся свободный будет очень быстро выбираться по индексу.


суть в том что должна быть возможность ввести номер руками и получить автоматом причём минимальное значение, по поводу таблички идея интересная, попробую продвинуть её

Цитата(Deniz @  2.2.2011,  15:30 Найти цитируемый пост)
реализация действительно ...
 
ж. не ж. а отрабатывает быстрее Вашего в 2 раза.


Цитата(Akina @  2.2.2011,  15:40 Найти цитируемый пост)
ты забыл, что у него ещё эти ИДы хранятся как СТРОКИ...

это не ID а строка Лицевого счёта, ID отдельный и они никак не связаны

PM MAIL   Вверх
Zloxa
Дата 2.2.2011, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(ziga @  2.2.2011,  17:39 Найти цитируемый пост)
трабатывает быстрее Вашего в 2 раза.

Надо буйт побаловатсья. Думается мне, на действительно больших объемах hash join сделает window srot.... Однако ж были случаи, когда подобные мои предположения были развенчаны практикой.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 2.2.2011, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(ziga @  2.2.2011,  18:39 Найти цитируемый пост)
должна быть возможность ввести номер руками и получить автоматом причём минимальное значение

Пиши функцию. Внутри - курсор. Думаю, быстрее получится.
Приблизительный код (без намёка на соблюдение синтаксиса)
Код

create function firstID(in scanfrom)
create cursor id_list as
  select id 
  from mytab 
  where id >= scanfrom 
  order by id asc;
open id_list;
fetch id_list into @a;
do
  fetch id_list into @b;
  if @b-@a>1 then exit do;
  if isempty(@b) then exit do;
loop;
close id_list;
return @a+1;
end function;


Добавлено через 2 минуты и 40 секунд
PS. Надеюсь, поле индексировано?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ziga
Дата 2.2.2011, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Цитата(Akina @  2.2.2011,  17:54 Найти цитируемый пост)
PS. Надеюсь, поле индексировано?


конечно smile

функция я думаю не вариант, а если нет дыр будет фечить все 600 000 записе (на данный момент)
PM MAIL   Вверх
Zloxa
Дата 2.2.2011, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @  2.2.2011,  17:54 Найти цитируемый пост)
PS. Надеюсь, поле индексировано? 

Если и индексировано, то сортироваться надо по числовому представлению значения, иначе будет фейл. А это делает невозмжным использование индекса (если это не FBI)

Впрочем, решение ТС тоже не лишено этого недостатка.  smile 



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 2.2.2011, 18:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(ziga @  2.2.2011,  19:04 Найти цитируемый пост)
если нет дыр будет фечить все 600 000 записе (на данный момент) 

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

Цитата(Zloxa @  2.2.2011,  19:13 Найти цитируемый пост)
сортироваться надо по числовому представлению значения, иначе будет фейл

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

Это сообщение отредактировал(а) Akina - 2.2.2011, 18:19


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Deniz
Дата 3.2.2011, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



Цитата(ziga @  2.2.2011,  19:39 Найти цитируемый пост)
ж. не ж. а отрабатывает быстрее Вашего в 2 раза.
так в Вашем запросе есть доп. ограничение x not like '%666%'.
Может его добавить?


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
ziga
Дата 3.2.2011, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Цитата(Deniz @  3.2.2011,  08:23 Найти цитируемый пост)
ак в Вашем запросе есть доп. ограничение x not like '%666%'.


это всего лиш исключение номеров типа 10006660 суеверные, боятся числа 666 smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0837 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.