Запросы на программное обеспечение с использованием SQL-запроса в SCCM - PullRequest
2 голосов
/ 09 сентября 2011

Я ищу определенные части программного обеспечения в нашей сети, запрашивая базу данных SCCM. Моя проблема в том, что по разным причинам я иногда могу искать по имени программы, а иногда мне нужно искать конкретный EXE.

Когда я запускаю приведенный ниже запрос, будет ли выполняться 13 секунд, если предложение where содержит AND, но будет работать в течение нескольких дней без результатов, если AND будет заменено на OR. Я предполагаю, что это делает это, потому что я не присоединяюсь должным образом к столам. Как я могу это исправить?

select vrs.Name0
FROM v_r_system as vrs
join v_GS_INSTALLED_SOFTWARE as VIS on VIS.resourceid = vrs.resourceid
join v_GS_SoftwareFile as sf on SF.resourceid = vrs.resourceid

where 
VIS.productname0 LIKE '%office%' AND SF.Filename LIKE 'Office2007%'

GROUP BY vrs.Name0

Спасибо!

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Вот хорошая статья Microsoft http://msdn.microsoft.com/en-us/library/ms172984.aspx об улучшении индексов.См. Раздел «Индексы с предложениями фильтра» (повторяет предыдущий ответ.)

Вы пробовали что-то в этом духе, а не как запрос?

... где название продукта в ('MicrosoftOffice 2000 »,« Microsoft Office xyz »,« Whateverelse »)

1 голос
/ 09 сентября 2011

Ваше предложение LIKE содержит совпадение с подстановочным знаком в начале строки:

LIKE '%office%'

Это не позволяет SQL Server использовать индекс для этого столбца, следовательно, медленный запрос. В идеале вы должны изменить свой запрос, чтобы в предложении LIKE не использовался подстановочный знак в начале.

В случае, когда предложение WHERE содержит AND, его запрос сначала основан на предложении Filename (он может использовать индекс здесь, и это относительно быстро), а затем фильтрует этот сокращенный набор строк на основе по вашему productname0 предложению. Однако, когда вы используете OR, он не ограничивается просто возвратом строк, которые соответствуют вашему предложению Filename, и поэтому он должен выполнить поиск по всей таблице, проверяя, соответствует ли каждое поле productname0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...