Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Sinclair, Вы писали:
EP>>>И чем они помогут в случае динамических фильтров и динамических предикатов? S>>На уровне базы динамические фильтры от нединамических неотличимы. Нет никакого специального синтаксиса для select, который выбирает "динамику". S>>Движок каждый раз сравнивает запрос с набором индексов, и выбирает оптимальный план. Если движок приличный, то он ещё и учитывает конкретные значения параметров запроса и статистику реальных данных для оценки селективности различных частей предикатов.
EP>Здесь под динамическими фильтрами и предикатами — подразумеваются выражения неизвестные во время сборки приложения. Их "специальность" в том, что для них нельзя построить индексы заранее, а не в том что у них какой-то особенный синтаксис.
Ты предполагаешь, что любой запрос равновероятен? Тогда чем поможет кеш? А если не равновероятен, то в чем проблема построить индексы?
EP>>>Для динамических запросов, с динамическими формулами? S>>Индексированное представление — один из хороших вариантов сделать "прикладное кэширование", показав базе, какие производные данные мы ожидаем часто видеть в запросах.
EP>Как создать индекс для динамических формул?
Нету в SQL динамических формул, они все для СУБД одинаковые. Но в реальной жизни окажется, что одни предикаты встречаются чаще других. Например для таблиц с историей данных чаще будут встречаться предикаты с датой, чем с любым другим полем и нам ничего не помешает сделать индекс по дате, который ускорит львиную долю запросов. А если часто встречаются агрегаты по определенным полям, то мы можем сделать индексированное представление, которое ускорит нам запросы.
S>>И опять: вся мощь оптимизации движка позволяет нам получать высокую производительность независимо от "степени динамичности". EP>Не будет никакой высокой производительности для выражений задающихся извне.
Опять таки если считать что все запросы равновероятны. Но тогда и кеши не помогут (вообще никакие).