powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / долго выполняется запрос
25 сообщений из 54, страница 2 из 3
долго выполняется запрос
    #38666874
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect 'localhost/3051:test' user 'SYSDBA' password 'masterkey';
Database:  'localhost/3051:test', User: SYSDBA
SQL> SET SQL DIALECT 3;
SQL> with t(a) as (
CON>   select CAST(9999 AS NUMERIC(4, 0)) 
CON>   from rdb$database
CON>   union all
CON>   select CAST(9999 AS NUMERIC(4, 0))
CON>   from rdb$database
CON>   union all
CON>   select CAST(9999 AS NUMERIC(4, 0))
CON>   from rdb$database
CON>   union all
CON>   select CAST(9999 AS NUMERIC(4, 0))
CON>   from rdb$database
CON>   union all
CON>   select CAST(9999 AS NUMERIC(4, 0))
CON>   from rdb$database
CON>   union all
CON>   select CAST(9999 AS NUMERIC(4, 0))
CON>   from rdb$database
CON>   union all
CON>   select CAST(9999 AS NUMERIC(4, 0))
CON>   from rdb$database
CON> )
CON> select sum(a)
CON> from t;

                  SUM
=====================
                69993

SQL>

numeric(4,0) - храниться как smallint, что не мешает при суммировании превышать его разрядность и менять её на INTEGER, то же самое можно сделать и для больших точностей.
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38666880
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

"храни тся ".
http://www.ibase.ru/devinfo/ibp_60_exact_num_fs.html
SUM and AVG are exact if the subject row has an exact numeric type and the scaled sum fits in 64 bits: otherwise we raise an overflow exception. SUM and AVG are never computed internally using floating point arithmetic unless the data type of the column is approximate numeric.
Если я верно понимаю фразу scaled sum fits in 64bits, результат sum и avg для exact numeric всегда 64бит. И это следует также из того, что prepare должно вернуть описание типов возвращаемого результата до выполнения запроса. А динамически это описание (после или во время выполнения запроса) не может меняться (хотя у меня тоже была такая мысль).
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38666883
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисnumeric(4,0) - храниться как smallint, что не мешает при суммировании
превышать его разрядность и менять её на INTEGER
Вот только она меняется на INTEGER (а скорее всего сразу на BIGINT) ещё до начала
суммирования, а не в процессе. Движок просто берёт тип наибольшей доступной разрядности.
Что будет когда таким типом станет NUMBER(38)?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38666886
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

хм... тогда DS прав в том что производительность упадёт, т.к sum придётся возвращать 128 битное значение
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38666888
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DS> Что будет когда таким типом станет NUMBER(38)?..

Дим, насколько я понимаю, это будет во-первых,
редкая операция и сугубо на совести тех, кто выбрал
этот тип (скорее всего, небольшое падение скорости
их вполне устроит), во-вторых, на производительности
всех остальных операций она не скажется (не должна).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38666895
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамсугубо на совести тех, кто выбрал этот тип
Ты не врубаешься: этот тип будет выбираться всегда для агрегатных функций и почти всегда -
для вычислений более чем в одно действие. Независимо от желания прокладки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38666897
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DS> этот тип будет выбираться всегда для агрегатных функций

Разве? Впрочем, да, наверное. Ну тогда ССЗБ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38666900
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
однако что меня удивляет, так это то, что точность NUMERIC в Oracle, MS SQL, DB 2, PosgreSQL превышает 18. Неужели у них всё так плохо?
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38666910
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на всякий случай - нашел вот такую статью
http://accu.org/index.php/articles/1849
вдруг поможет (вообще).
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38666918
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисНеужели у них всё так плохо?
Таблоид не даст соврать, типы PLS_INTEGER и иже с ним изобретены не от хорошей жизни.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667090
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТы не врубаешься: этот тип будет выбираться всегда для агрегатных функций и почти всегда - для вычислений более чем в одно действие.Ты уже написал соответствующий патч? Иной раз безапелляционность просто поражает.
Как же мы жили когда процы были 16/32 битные, а "длинная" арифметика была уже тогда?

Что помешает поглядеть на операнды и, для всей мелкоты до 64 бит взять за основу 64 бита, а если попался хотя бы один 128 битный, то уже не торопясь "топать по длинной дорожке". ну т.е. sum(numeric_18_0) ,будет работать как раньше, а к примеру sum(numeric_18_0)+cast(0 as numeric(30)) уже в 128 битах, ну или sum(cast(numeric_18_0 as numeric(30)).

Это уже просто особенности реализации, к тому же сдается мне и в современных компиляторах должны быть подпитка для таких чисел (правда здесь я грешным делом очень давно не интересовался).
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667827
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_PisarevskyЧто помешает поглядеть на операнды и, для всей мелкоты до 64 бит взять за основу 64 бита
Не спасет
(2^64-1)+(2^64-1) = ?
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667872
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal(2^64-1)+(2^64-1) = ?Ivan_Pisarevskyскладывать пока влазит в базовые 64 бита, как не влезло, то вываливать исключение.Кому не нравится, кастует к более длинному типу и получает искомое, возможно чутка подождав.
Сейчас же такая ситуация возможна? Возможна. Кто-то от этого умер? нет, никто не умер.
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667879
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyКому не нравится, кастует к более длинному типу
Ну и зачем тогда вообще длинные числа, если уже сейчас можно получить тот же результат,
скастовав в DOUBLE?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667893
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНу и зачем тогда вообще длинные числа, если уже сейчас можно получить тот же результат,
скастовав в DOUBLE?..Есть эстеты кому нравится точность. каст к даблу гарантированно приведет к потере точности. ты предлагаешь, например, деньги хранить в дабле? это как-то не совсем правильно.

Вопрос был, как я понимаю, в том, что те кому нужно 19 и более значащих чиселок, готовы подождать, но чиселки получить все и не округленные. Основная масса(и я в их числе) готовы довольствоваться 18 и ждать не хотят.
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667925
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevskyты предлагаешь, например, деньги хранить в дабле?
Не хранить. Считать. Я слышал, есть такие странные личности, которые что-то считают на
стороне сервера...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667942
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvНа всякий случай - 3/2 = 1.5 (NickDee) не поддерживаю
Я как-то пытался перейти с fastscript на remobjects pascalscript.
Очень удивился что в pascalscript int/int = int, и это нормально в картине мира разработчиков.
Я было начал переделывать уже имеющиеся скрипты и кастовать первый операнд к Double, типа
Код: pascal
1.
Y := (Double(A)/B + Double(C)/D) * (Double(E)/F + Double(G)/H);

вместо
Код: pascal
1.
Y := (A/B + C/D) * (E/F + G/H);

Но быстро понял, что даже мне лень так писать, не то что моим клиентам (они инженеры, а не программеры).
Тут снижается читабельность, появляется возможность ошибиться, неудобно пользователям.
Еле выбил у них переключалку на нормальное деление, но по дефолту они всё равно оставили int/int = int.
Вот вам пример из реальной жизни.
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667948
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

когда ты уже перестанешь позиционировать свой опыт в других языках программирования на SQL? Пойми это другой язык и стандарт у него другой нравится это или нет.
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667951
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело не в том, что это другой ЯП, стандарт и пр.
Дело в том, что большая часть этого опыта никак
с SQL не соотносится, а местами и нелогична.

Вот тут про Int/int - в SQL так? Нет. Ну так чего
этот бред сюда приводить, что доказывать?
Что в жизни бывают глупости? Ну, бывают.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667965
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНе хранить. Считать.А разница? бухи за "копейки" всю душу вынут. и какая разница на каком этапе ты прое*** точность? когда хранил или когда считал?
Dimitry SibiryakovЯ слышал, есть такие странные личности, которые что-то считают на
стороне сервера...если мне надо на клиента отдать одну чиселку коя является суммой 1000 чиселок, ты предлагаешь притащить всю тыщу на клиента и там сложить?
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667968
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevskyесли мне надо на клиента отдать одну чиселку коя является суммой
1000 чиселок, ты предлагаешь притащить всю тыщу на клиента и там сложить?
Для сложения длинные числа не нужны. Имеющихся 64 бит хватит на посчитать всю валюту в россии.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667974
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисNickDee,

когда ты уже перестанешь позиционировать свой опыт в других языках программирования на SQL? Пойми это другой язык и стандарт у него другой нравится это или нет.
Вот у C++ есть стандарт. Его все придерживаются и получают бонусы от совместимости.
У SQL тоже есть "стандарт". Его придерживаются так, что совместимости практически нет.
Я бы сказал так, что стандарт SQL является стандартом только по названию, но не по факту.
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667976
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovИмеющихся 64 бит хватит на посчитать всю валюту в россии.
не хватит. проблемы с нехваткой double и bigint именно у контор, которые в россии считают деньги. Только российские, или разные, без понятия.
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667977
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДля сложения длинные числа не нужны.Ты так уверенно говоришь за всех, что мне как-то неловко... Треуголку поправьте, Бонапарт Виссарионович. ;)
...
Рейтинг: 0 / 0
долго выполняется запрос
    #38667983
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyDimitry SibiryakovДля сложения длинные числа не нужны.Ты так уверенно говоришь за всех, что мне как-то неловко... Треуголку поправьте, Бонапарт Виссарионович. ;)
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 2 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / долго выполняется запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]