All streams
Search
Write a publication
Pull to refresh
25
0
Алексей Скахин @pihel

Data Engineer

Send message
Тоже давно заметил, что в фоне запущена служба Я.Метро, даже если приложение выключено. Пришлось снести приложение, хотя бы в целях экономии ресурсов телефона.
Обнаружил в базе один из моих email, почта не основная, была зарегана на всякий случай пару лет назад. Использовался только для пересылки почты на gmail, больше нигде пароль не вводил.
Так что ввод пароля на левом сайте исключаю.
Добавлю еще использование индексов на временных (сессионных) таблицах в ORACLE бессмысленно. Индекс можно создать, но статистика по нему не будет собираться, значит оптимизатор его не будет использовать.
Есть вариант подсунуть статистику от аналогичной не временной таблицы, но это как то уж больно запарно.
Проблему можно решить, прибегая к временным таблицам, т.е. результат тяжелого запроса предварительно положить во временную таблицу и далее использовать.

Кстати, ORACLE, в данном случае, чаще всего сам создает временную таблицу, ну или ему можно подсказать хинтом /*+ materialize */ и преимущество использования WITH будет очевидно.
Лучше бы все чеки были строго одинаковые, как бы это упростило задачу автоматизированного распознавания.
Спасибо, надо будет провести эксперимент.
А у extjs 5 есть совместимость с 4 версией? Могу я подменить библиотеку и продолжить работу?
Oracle rownum считает до сортировки, т.е. там нужно писать так:
select * from (select c.* from comments c ORDER BY id) v WHERE rownum BETWEEN 10000 and 10010

Mysql в этом плане гораздо удобней.
Насчет оптимизации не знаю, нет возможности сейчас проверить план.
0.044 — это первые 50 записей, без полного фетча.
Включил в индекс, разница разительная:
Время без индексов: 4.4с (стоимость 5753 — фулскан таблицы ), с индексом: 0,044с (стоимость 3915 — фулскан индекса ). Таблицу между вариантами пересоздавал.

У первого и второго запроса с одинаковыми индексом от 3 варианта одинаковая стоимость и время выполнения 0,5с.

Так что, похоже, 3ий вариант самый быстрый.
Да, кеш не сбрасывал. Индексы создавал, как в статье написано, чтобы не было разночтений.
По вашим замерам все равно получается, что обычный hash join лучше аналитической функции.
Отсюда можно сделать вывод, что аналитические функции тоже не всегда панацея.
Провел тесты на ORACLE:
CREATE TABLE tmp_shop (
  id INTEGER,
  article INTEGER NOT NULL,
  dealer VARCHAR(45) NOT NULL,
  price NUMBER(8,2) NOT NULL,
   constraint PK_tmp_shop primary key (ID) using index tablespace IDX
) TABLESPACE  DAT;


INSERT INTO tmp_shop (id, article, dealer, price) 
SELECT rownum, CEIL(dbms_random.value(8,2) * 9999), CEIL(dbms_random.value(8,2) * 999), dbms_random.value(8,2) * 9999
FROM dual
connect by level < 1000000;

create index i_tmp_shop_FND on tmp_shop (article asc) tablespace IDX;
--=0.848
SELECT article, dealer, price 
FROM   tmp_shop s1
WHERE  price=(SELECT MAX(s2.price)
    FROM tmp_shop s2
    WHERE s1.article = s2.article);
    
DROP index i_tmp_shop_FND;
create index i_tmp_shop_FND on tmp_shop (article, price) tablespace IDX;
--0.502
SELECT s1.article, dealer, s1.price
FROM tmp_shop s1
JOIN (
    SELECT article, MAX(price) AS price
    FROM tmp_shop
    GROUP BY article
) s2 ON s1.article = s2.article AND s1.price = s2.price;

--4.38
select article, dealer, price 
from (
    select s.*, row_number() over (partition by article order by price desc) as r
    from tmp_shop s)  s1
where r = 1;

--2.1
select article, MAX(dealer) KEEP(DENSE_RANK FIRST ORDER BY price DESC), MAX(price)
FROM tmp_shop
GROUP BY article
Может Oracle когда-нибудь перенесет аналитические функции в младшего брата.
Тут пригодились бы KEEP или OVER.
У меня небольшой вопрос не в тему: цвет радужки несет какой-то практически смысл? Или это чисто природное украшательство?
Я сюда отнес бы pl/sql, tsql и д.р. Не надо обижать разработчиков баз данных.
А просто SQL запросом можно?
Всем ORACLE SQL. Длинновато получилось.
WITH str
        AS (SELECT   '72 97 112 112 121 32 80 114 111 103 114 97 109 109 101 114 115 32 68 97 121 33'
                         AS code
              FROM   DUAL)
    SELECT   REPLACE (
                 MAX(SYS_CONNECT_BY_PATH (
                         CHR (REGEXP_SUBSTR ( (    SELECT   code FROM str),
                                             '[^ ]+',
                                             1,
                                             LEVEL)),
                         '.')),
                 '.',
                 '')
                 AS name
      FROM   DUAL
CONNECT BY   REGEXP_SUBSTR ( (    SELECT   code FROM str),
                            '[^ ]+',
                            1,
                            LEVEL) IS NOT NULL
На gRaphael все проще:
window.onload = function () {
                var r = Raphael("holder");                
                var pie = r.g.piechart(
120, 140, 100,
[35349.7,41085], 
{legend: ["%%.% – Расход (35349.7р.)", "%%.% - Приход (41085р.)"], 
legendpos: "east"});
                pie.hover(function () {
                    this.sector.stop();
                    this.sector.scale(1.1, 1.1, this.cx, this.cy);
                    if (this.label) {
                        this.label[0].stop();
                        this.label[0].scale(1.5);
                        this.label[1].attr({"font-weight": 800});
                    }
                }, function () {
                    this.sector.animate({scale: [1, 1, this.cx, this.cy]}, 500, "bounce");
                    if (this.label) {
                        this.label[0].animate({scale: 1}, 500, "bounce");
                        this.label[1].attr({"font-weight": 400});
                    }
                });
};

Ну и демо: cash.pihel.jino.ru/?act=analiz
Рад стараться.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity