Ну, я не вижу ничего явно неправильного в самом запросе, поэтому короткий ответ заключается в том, что вы не можете оптимизировать его, не запустив его сначала и не посмотрев на план запроса. Из-за того, как работает реляционная база данных, очень сложно предсказать, на что будет похожа производительность, просто посмотрев на запрос, поскольку он зависит от многих других скрытых факторов, таких как распределение данных, статистика, предоставленные параметры и другие скрытые внутренние компоненты. .
Тем не менее, я изо всех сил пытаюсь понять преимущество использования этого подхода по сравнению с простым выполнением обычного выбора - преимущество only , которое я вижу, состоит в том, что оно защитит от плохой индексации по пронумерованным столбцам для пользователей, выполняющих SELECT
на основе столбца RELEVANCY
(который, вероятно, всегда будет правильно проиндексирован).
Кроме того, указанная вами схема, как представляется, ограничивает MyTable
возможностью применения только одного правила в любой момент времени, и поэтому вам необходимо выполнить это UPDATE
каждый раз, когда фильтр все равно изменяется.
Чего вы пытаетесь достичь?
Если вы не можете заранее определить, что пользователь будет запрашивать, единственное, что вы действительно можете сделать с точки зрения индексации, - это индексировать все столбцы (индивидуально) и надеяться на лучшее.
Со многими столбцами вы можете начать видеть снижение производительности во время обновления или вставки в эту таблицу из-за большого количества индексов, которые нуждаются в обновлении, но альтернативой, скорее всего, является сканирование таблицы каждый раз, когда пользователь выполняет поиск в столбце. это не индексируется.
Также полезно, если вы готовы изменять индексы в каждом конкретном случае в случае возникновения проблем с определенными запросами.