Конференция "Базы" » HELP!!!Странная сортировка при GROUP BY [D7]
 
  • vlgrig1961 (30.03.11 09:27) [0]
    Здравствуйту уважаемые! Возникла такая проблема
    База Oracle 8 запросы с использованием group by по стринговым индексам сортировались нормально по алфавиту.
    (select KltName,KltKod,sum(Summa) from Jurnal group by KltName,KltKod)
    Перешел на Oracle 9.2 базу перенес экспорт/импорт-ом
    (единственно в старой базе индексы хранились в tablespace USR, вместе с данными, а вновой перенес в отдельный tablespace)
    Сейчас теже запросы сортируются по длине поля KltName, т.е. сначала все длиной 5 символов, потов 6 и т.д. по возрастанию, а если одинаковой длины, то они по алфавиту.
    Не могу понять в чем причина???????????
    Может кто подскажет!!!!!! Заранее спасибо.
  • Anatoly Podgoretsky © (30.03.11 10:10) [1]
    > vlgrig1961  (30.03.2011 09:27:00)  [0]

    А где тут в запросе сортировка, надеешься на везение?
  • OW © (30.03.11 10:20) [2]
  • vlgrig1961 (30.03.11 10:23) [3]
    сортировка в group by программа работала лет десять и все время нормально сортировалось по алфавиту!!!
  • OW © (30.03.11 10:35) [4]
    Вам идеолог Oracla говорит

    NO, NO, NO, NO, NOT TRUE
    never been true
    never was true
    never will be true.
    There is ONLY one way to get sorted output "gauranteed" and that is.......

               TO USE ORDER BY
  • Игорь Шевченко © (30.03.11 10:39) [5]

    > сортировка в group by программа работала лет десять и все
    > время нормально сортировалось по алфавиту!!!


    тебе повезло. но везение не может быть вечным
  • vlgrig1961 (30.03.11 11:57) [6]
    А повлияет ли на скорость выполнения запроса добавление ORDER BY???
  • OW © (30.03.11 12:04) [7]
    обязательно, быстрее будет
    чем больше написать, тем более быстрее работает
    главное написать секретный модификатор перед запросом
    do_it_fast = true
    :)

    а сами как считаете?
    что быстрее - операция или операция + еще что-то

    потеря скорости скорее всего будет практически невидна на незначительных объемах
  • Anatoly Podgoretsky © (30.03.11 12:09) [8]
    > vlgrig1961  (30.03.2011 10:23:03)  [3]

    Никогда она там не работало, было просто везение.
    Теперь тебе не на кого обижаться, везение кончилось.
  • Anatoly Podgoretsky © (30.03.11 12:10) [9]
    > vlgrig1961  (30.03.2011 11:57:06)  [6]

    Конечно повлияет, ничего даром не дает, но ты уж решай сам, нужен ли тебе
    сортированый набор или будем играть в рулетку.
  • Anatoly Podgoretsky © (30.03.11 12:11) [10]
    > OW  (30.03.2011 12:04:07)  [7]

    Но может быть и быстрее с сортировкой, если она совпадает с ключом, будет
    другой план исполнения
  • OW © (30.03.11 12:31) [11]

    > Anatoly Podgoretsky ©   (30.03.11 12:11) [10]

    это да
  • sniknik © (30.03.11 12:52) [12]
    > Никогда она там не работало, было просто везение.
    не знаю за оракл, но вообще "сортировка группировкой" была, надежды на всегда правильную не было (не гарантировано, в доке не прописано), но сама она была... т.к. в процессе "группирования" удобнее манипулировать сортированными данными.

    вот, чтобы не быть голословным, проверил на информиксе, первой попавшейся таблице
    SELECT Code, Count(*) FROM StepTable
    GROUP BY Code
    строго по порядку.

    я так понимаю и в оракле будет/есть, если например по числовому полю сделать... а у него текстовое, и сортировка тоже присутствует, просто оракл в какой то момент "решил" что манипулировать ему проще не просто отсортированными строками, а еще и разделенными по длине...
    ну и получилось то что получилось.
  • sniknik © (30.03.11 12:55) [13]
    в общем это из разряда использования значения переменной цикла после цикла... оно вроде и остается последнее значение, но гарантий никаких. (даже простая перекомпиляция с другими параметрами и "привет")
  • Игорь Шевченко © (30.03.11 12:59) [14]
    sniknik ©   (30.03.11 12:52) [12]


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


    Я вот про MS SQL, информикс и прочее сказки не рассказываю, давай ты про Oracle их не будешь рассказывать.
  • Игорь Шевченко © (30.03.11 13:01) [15]
    есть такая штука, как стандарт SQL, в нем ясно английским по белому написано, что сортированный набор появляется после клаузы ORDER BY и никак иначе.
  • OW © (30.03.11 14:02) [16]
    там же он пишет

    group by
       o HAS NEVER HAD TO SORT
       o ALWAYS DID A BINARY SORT (meaning for most of the world, the sort
         would have been WRONG even if it happened by accident)
  • Anatoly Podgoretsky © (30.03.11 14:05) [17]
    > sniknik  (30.03.2011 12:52:12)  [12]

    И с Информиксом тебе тоже пока везет
  • sniknik © (30.03.11 14:53) [18]
    > И с Информиксом тебе тоже пока везет
    я таким никогда не пользуюсь. приведенный запрос чисто ради попытки понимания как оно там "у нутрях" работает.
  • Кщд (31.03.11 07:06) [19]
    >Anatoly Podgoretsky ©   (30.03.11 12:11) [10]
    Но может быть и быстрее с сортировкой, если она совпадает с ключом, будет
    другой план исполнения

    Какое использование индекса в сгруппированном наборе?
 
Конференция "Базы" » HELP!!!Странная сортировка при GROUP BY [D7]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]