создание из виртуального столбца реальный

Тема в разделе "Базы данных", создана пользователем dazed, 15 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    В одном из запросов формирую один виртуальный столбец по CASE условию из трех столбцов, и так вот вышло что именно по нему нужно делать сортировку и выборку с помощью HAVING, таблица большая больше 50 000 записей. Так понимаю SQL по ней проходится полностью. Возможно ли создание индекса к этому виртуальному столбцу?

    У меня как вариант сделать в структуре еще один столбец и загонять туда сформированный данные, с обновлением раз в сутки.

    Может быть есть по красивее решение?
     
  2. pslava

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    Почему бы не сделать
    select * from (
    select id , ..., case ... as virt
    from table)
    group by virt
    having virt>5
     
  3. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    разве это что-то даст в производительности?
     
  4. pslava

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    Это решение не требует дополнительных объектов и данные всегда актуальны:)
    а если еще отсекать по дате - то будет шустро работать
     
  5. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    я наподобие такого уже сделал, только чуть по другому, но этот запрос может быть тупить когда большая выборка без условий, а ему нужно сортировать именно по этому виртуальному столбцу и он проходит полностью, что занимает много времени.
     
  6. MadWizard

    MadWizard Постоялец

    Регистр.:
    24 мар 2009
    Сообщения:
    145
    Симпатии:
    20
    Возможно, если на этих трех полях висят отдельные индексы, mysql будет перебирать их. Но не уверен, надо пробовать.

    Иначе остается вариант, как ты правильно отметил, создать столбец, повесить на него индекс и по расписанию, раз в полчаса-час, апдейтить его на всей таблице.
     
  7. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    да индексы на этих полях висят, но очень долго около 2 сек, выдает запрос.
     
  8. MadWizard

    MadWizard Постоялец

    Регистр.:
    24 мар 2009
    Сообщения:
    145
    Симпатии:
    20
    Значит, так с индексами он не может работать. А почему решение с отдельным столбцом не нравится? Актуальные данные очень редко нужны на лету, обычно раз в полчаса обновлять более чем достаточно.
     
    dazed нравится это.
Статус темы:
Закрыта.