Светлана Сененко (turtle_t) wrote,
Светлана Сененко
turtle_t

Categories:

Рабочее (кое-какие странности SQL Server'а)

В общем, это может быть интересно разве что коллегам по специальности data analyst, да и то, только тем, кто работает вплотную с SQL Server-ом. Особенная надежда у меня в этом смысле на новую френдессу uro_da :) и на "старую" френдессу gem_in_i. Может, есть и другие спецы по этому делу у меня во френд-ленте, а я просто не знаю, так что колитесь :). Короче, нашла я что-то типа "бага", точнее, "неприятной особенности" SQL Server'а, которую пока что просто обошла :)

Речь идёт о SELECT query, где соединяются (JOIN) две больших таблицы, и есть условие по колонке в одной из них, чтобы значения были в неком интервале. Эта колонка -- даты (datetime). Так вот, когда используешь операнд BETWEEN, то этот запрос работает бесконечно, даже если запрашиваемый период -- всего два дня. А ежели вместо BETWEEN поставить IN и задать массив дат (перечислить нужные), то результат получается за секунды. Пока что не знаю, как заставить эту хрень работать быстро с BETWEEN... Может, кто знает?...

В гугле искала, как и ожидалось, проблема такая возникает не только у меня, но пока что мне попались только случаи, когда народ имел дело с данными типа INTEGER, да и решал проблему тоже обходными манёврами...

На всякий случай: индекс по этой колонке есть.

И ещё один прикол. Раньше эта хрень таки работала и с BETWEEN. Долго (от получаса до трёх часов непрерывной работы), но результат всё-таки выдавала. А потом перестала вообще :) За это время произошли две вещи. Во-первых, таблицы немного выросли (они каждый день растут). А во-вторых, одна из таблиц была убита и восстановлена -- вроде бы в первозданном виде, а там, кто его знает... Это делала не я, а программа, которую нам продают вместе с данными.

Апдэйт: Докладываю :) Убила я этот индекс в такой-то бабушке и тут же создала новый, такой же, но не золотой, а простой. И эта хрень заработала с BETWEEN так же быстро, как с IN. Ура! Великая победа китайского народа! :)))) Всем откликнувшимся огромное спасибо!!!

Вывод-урок на будущее: когда индекс начинает делать вид, что его нет, надо его и впрямь извести по-настоящему и потом сделать заново!
Tags: вопрос, работа
Subscribe

  • Про Немцова

    Когда Немцова убили, (моя) дочка спросила, кто он такой и почему с ним расправились. Так получилось, что она его не знала: сначала была маленькой, а…

  • Обама рекламирует "обамакер"

    Обама тут не просто дурачится -- а дурачится он весьма симпатично, "как все нормальные люди" -- а рекламирует новую всеамериканскую медицинскую…

  • Ещё раз про свободу (и немного про семью)

    Какая интересная цитата! Слишком часто возникающая в русской истории готовность масс отказаться от свободы обусловлена, как кажется, дискомфортом…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 24 comments

  • Про Немцова

    Когда Немцова убили, (моя) дочка спросила, кто он такой и почему с ним расправились. Так получилось, что она его не знала: сначала была маленькой, а…

  • Обама рекламирует "обамакер"

    Обама тут не просто дурачится -- а дурачится он весьма симпатично, "как все нормальные люди" -- а рекламирует новую всеамериканскую медицинскую…

  • Ещё раз про свободу (и немного про семью)

    Какая интересная цитата! Слишком часто возникающая в русской истории готовность масс отказаться от свободы обусловлена, как кажется, дискомфортом…