|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
Всем привет! Есть простая задача, искать данные по переменной, если переменная пустая, то возвращать все записи. Работает вот так. Код: sql 1. 2. 3. 4.
Но, по полю email есть индекс и при такой конструкции он не работает. Можно как-то составить 1 запрос и без динамика, чтобы при заполненной переменной все таки начал использоваться индекс? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 11:03 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
Kolu4ka, уберите is null если сиквел не использует индекс, то считает что дешевле просканировать таблицу (меньше I/O) выполните и сравните результат Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 11:21 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 11:23 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
Kolu4ka Всем привет! Есть простая задача, искать данные по переменной, если переменная пустая, то возвращать все записи. Работает вот так. Код: sql 1. 2. 3. 4. 5.
Но, по полю email есть индекс и при такой конструкции он не работает. Можно как-то составить 1 запрос и без динамика, чтобы при заполненной переменной все таки начал использоваться индекс? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 11:28 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
Kolu4ka, @emailadr is null не очень хорошая идея, так как таблица может содержать большое количество строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 11:42 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
msLex, спасибо, все заработало как хотелось. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 12:29 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
Kolu4ka Всем привет! Есть простая задача, искать данные по переменной, если переменная пустая, то возвращать все записи. Работает вот так. Код: sql 1. 2. 3. 4.
Но, по полю email есть индекс и при такой конструкции он не работает. Можно как-то составить 1 запрос и без динамика, чтобы при заполненной переменной все таки начал использоваться индекс? Хотите прикол? Ваш запрос не будет возвращать ВСЕ ЗАПИСИ. Он будет возвращать записи, где поле email is null или где поле email равно значению переменной. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 13:31 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
DaniilSeryi Kolu4ka Всем привет! Есть простая задача, искать данные по переменной, если переменная пустая, то возвращать все записи. Работает вот так. Код: sql 1. 2. 3. 4.
Но, по полю email есть индекс и при такой конструкции он не работает. Можно как-то составить 1 запрос и без динамика, чтобы при заполненной переменной все таки начал использоваться индекс? Хотите прикол? Ваш запрос не будет возвращать ВСЕ ЗАПИСИ. Он будет возвращать записи, где поле email is null или где поле email равно значению переменной. брэхня ! там же переменная в запросе на НУЛЛ проверяется, а не поле ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 13:37 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
msLex, по-моему, еще хинтом можно отключить parameter sniffing, но тогда оценка кардинальности будет происходить не по гистограмме, а по плотности, как для подсказки unknown. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 13:52 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
Владислав Колосов msLex, по-моему, еще хинтом можно отключить parameter sniffing В данном случае нужно не отключать parameter sniffing, а явно использовать значение параметра при построении плана. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 13:55 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
msLex Владислав Колосов msLex, по-моему, еще хинтом можно отключить parameter sniffing В данном случае нужно не отключать parameter sniffing, а явно использовать значение параметра при построении плана. надо только упомянуть, что что каждая рекомпиляция (option (recompile)) - это расход ЦПУ и времени стоит это учитывать при использовании, т.к. при частом вызове эффект будет значительным ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 14:43 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
komrad msLex пропущено... В данном случае нужно не отключать parameter sniffing, а явно использовать значение параметра при построении плана. надо только упомянуть, что что каждая рекомпиляция (option (recompile)) - это расход ЦПУ и времени стоит это учитывать при использовании, т.к. при частом вызове эффект будет значительным Все так, и есть альтернатива с if else, но при сколь-нибудь сложных запросах есть вероятность их рассинхронизации. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 14:56 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 15:45 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3.
Но в этом варианте проверьте, устроит ли вас план! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 15:56 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
iap Код: sql 1. 2. 3. 4. 5.
главное SET ANSI_NULLS OFF не делать ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 15:57 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
msLex iap Код: sql 1. 2. 3. 4. 5.
главное SET ANSI_NULLS OFF не делать ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 16:08 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
iap Код: sql 1. 2. 3. 4. 5.
кто бы объяснил задумку ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 17:39 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
Ролг Хупин iap Код: sql 1. 2. 3. 4. 5.
кто бы объяснил задумку При этом в условии отсутствует OR, который в первоначальном варианте тормозит запрос. Кстати, как получить записи, для которых email IS NULL, - это большой вопрос, поскольку значению параметра NULL придаётся особый смысл. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 17:54 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
iap, с юнионами точно не то. Дело в том, что я привела задачу частично, более полно выглядит она примерно так, параметров сколько угодно и не все могут быть заполнены. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
На некоторых полях есть индексы, но при таком запросе всегда возникали только сканы, при добавлении option (recompile) начали подхватываться индексы и запрос начал работать быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 18:00 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
Kolu4ka, В таком случае единственный вариант - это динамическая генерация запроса, либо на клиенте, либо в хранимке. Второе не рекомендую, я так делал однажды, задолбался код отлаживать. Если же клиентское приложение использует Entity Framework или какой другой ORM, то там это будет тривиально. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 04:42 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
iap Ролг Хупин пропущено... кто бы объяснил задумку При этом в условии отсутствует OR, который в первоначальном варианте тормозит запрос. Кстати, как получить записи, для которых email IS NULL, - это большой вопрос, поскольку значению параметра NULL придаётся особый смысл. Разве Union all- это не OR в даном случае? почемуне сделать одним запросом что-то типа: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 17:22 |
|
Конструкция запроса для поиска
|
|||
---|---|---|---|
#18+
Ролг Хупин iap пропущено... Первый SELECT возвращает все строки, если параметр IS NULL, второй SELECT - записи, соответствующие параметру в случае, если параметр IS NOT NULL. При этом в условии отсутствует OR, который в первоначальном варианте тормозит запрос. Кстати, как получить записи, для которых email IS NULL, - это большой вопрос, поскольку значению параметра NULL придаётся особый смысл. Разве Union all- это не OR в даном случае? почемуне сделать одним запросом что-то типа: Код: sql 1.
Переделывание OR на UNION - это хорошо известный способ оптимизации запроса. Но тут говорят: таких условий слишком много... А первоначальный вопрос - это совсем не то, что подразумевалось. Во как! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 17:39 |
|
|
start [/forum/topic.php?fid=46&msg=40125802&tid=1683940]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
151ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 235ms |
total: | 485ms |
0 / 0 |