Mamy problem z nadzieją, że dobrzy ludzie w Stack Overflow mogą nam pomóc. Używamy SQL Server 2008 R2 i mamy problemy z zapytaniem, które trwa bardzo długo, aby uruchomić na umiarkowanym zbiorze danych, około 100 000 wierszy. Używamy ZAWIERA do przeszukiwania plików xml i LIKE w innej kolumnie do obsługi wiodących symboli wieloznacznych.Powolne zapytanie SQL z CONTAINS i OR
Mamy powielana problem z następującym małej zapytania, które trwa około 35 sekund, aby uruchomić: planu
SELECT something FROM table1
WHERE (CONTAINS(TextColumn, '"WhatEver"') OR
DescriptionColumn LIKE '%WhatEver%')
zapytanie:
Jeśli zmodyfikować kwerendę powyżej używając Zamiast tego UNION, czas działania spada z 35 sekund do < 1 sekundy. Chcielibyśmy uniknąć stosowania tego podejścia do rozwiązania problemu.
SELECT something FROM table1 WHERE (CONTAINS(TextColumn, '"WhatEver"')
UNION
(SELECT something FROM table1 WHERE (DescriptionColumn LIKE '%WhatEver%'))
Plan Zapytanie:
Kolumna że używamy ZAWIERA przeszukiwać jest kolumna z typ obrazu i składa się z plików xml wielkości wszędzie od 1k do 20k w wielkości.
Nie mamy dobrych teorii, dlaczego pierwsze zapytanie jest tak powolne, więc mieliśmy nadzieję, że ktoś tutaj będzie miał coś mądrego do powiedzenia w tej sprawie. Plany zapytania nie pokazują niczego niezwykłego, o ile możemy to stwierdzić. Przebudowaliśmy również indeksy i statystyki.
Czy jest coś oczywistego, że tu jesteśmy?
Z góry dziękujemy za poświęcony czas!
Czy próbowałeś zmienić kolejność klauzul where? – idstam
Tak, już wypróbowaliśmy to. Nie było żadnych mierzalnych różnic w wydajności. – Tilfeldig
Czy możesz uruchomić osobno te dwa zapytania? Który jest wolniejszy? – niktrs