SQL-запрос действительно медленный, когда я удаляю одно дополнительное условие - PullRequest
0 голосов
/ 24 апреля 2018

У меня следующий запрос SQL:

SELECT top 100 Id
FROM TestTable
where 
    (Code like 'a000' + '%' or contains(Desc , 'a000*' )  )
    AND  (Active!='N' or Active is null)         
    AND  substring(Code,1,1) in ('1','2','3','4','5','6','7','8','9','0')
    ORDER BY Code

enter image description here

Для запуска требуется почти 70 мс , но я установил для active значение 'N', когда первый символ кода не числовой, поэтому последнее предложение where не нужно, но после удаления этого следующего запроса для запуска требуется 6 секунд !

SELECT top 100 Id
FROM TestTable
where 
    (Code like 'a000' + '%' or contains(Desc , 'a000*' )  )
    AND  (Active!='N' or Active is null)         
    ORDER BY Code

Я также запускаю этот запрос с советником по настройке ядра СУБД, но он не имеет никаких рекомендаций. enter image description here

1 Ответ

0 голосов
/ 24 апреля 2018

Хм, серьезная проблема с дизайном базы данных, если вам нужно выполнить запрос по подстроке поля. Однако, если общее количество записей, соответствующих первому критерию, не слишком велико, вы можете использовать временную таблицу:
ВЫБЕРИТЕ ID, код в #Testemp ОТ TestTable где (Код типа «a000» + «%» или содержит (Desc, «a000 *»)) AND (Active! = 'N' или Active is null) ЗАКАЗАТЬ ПО КОДУ --Затем:
ВЫБЕРИТЕ top 100 ID из #testemp, где подстрока (Code, 1,1) в ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0') заказ по коду

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