2014-02-17 2 views
0

Пусть у меня есть отборное заявление, как это ...Запросы от SQL занимает больше времени ... Производительность Выпуск

select a,b,c 
from table1 where d='' 
union 
select a,b,c 
from table1 where d>='' and e='' order by f asc,g desc offset 0 rows 
fetch next 100 rows only 

Допустим, мне нужно как выбрать с профсоюзом, но дело в том, когда я порядок с помощью непервичных ключей, то есть с помощью f и g для выполнения запроса требуется много времени. Но когда я делаю заказ с помощью первичных ключей, скажите a и b, он выполняется быстрее.

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

+0

Можете ли вы указать, что такое ваш механизм БД? Если вы выпускаете SQL Server Enterprise, вы можете использовать индексированные представления. –

+0

Сколько строк имеет 'd = ''' или 'd', являющееся' NULL'? –

+0

Почему 'd> = '''? Вы имеете в виду 'd is not null?? –

ответ

0

Лично я бы начать с удаления UNION оставляя вам что-то вроде:

SELECT 
    a,b,c 
FROM 
    table1 
WHERE 
    ISNULL(d,'') = '' 
    OR ((NOT ISNULL(d,'') = '') AND e='') 
ORDER BY 
    f ASC 
    , g DESC 
OFFSET 0 rows FETCH NEXT 100 ROWS ONLY 

Я бы затем просмотреть индексы, присвоенные в базу данных и, возможно, добавить f и g индексируемые, если вы не уверенный в индексировании, я предлагаю либо сделать (вставить здесь название поисковой системы), чтобы найти подходящие статьи, либо даже просмотреть другие вопросы переполнения стека, такие как this one. Если у вас есть объект, вы должны подумать об использовании SQL Profiler, чтобы определить, какие индексы будут полезны для вашей базы данных и улучшить ее производительность.

Еще одна вещь, на которую стоит обратить внимание - это эффективность вашего метода подкачки, если вы только хотите получить первые 100 результатов, вы можете сделать что-то вроде SELECT TOP 100..., или вы можете посмотреть this article, который детализирует эффективный пейджинг. Я сам не использовал OFFSET n ROWS SELECT NEXT 100 ROWS ONLY, но использовал (см. here) и не имел слишком много проблем самостоятельно.

Смежные вопросы