2015-06-16 2 views
-4

У меня есть две таблицы, у которых есть миллион записей. У меня есть требование применить сортировку, пейджинг (до 100 записей) и присоединиться к этой таблице. Запрос занимает 3-8 секунд, чтобы дать результат .Please предложить более эффективные способы, чтобы сделать этоУ меня есть две таблицы, у которых есть миллион записей

вот мой запрос:

; WITH TempResult AS (SELECT ROW_NUMBER() OVER(ORDER BY col1 desc) AS Row, col12 FROM table1 po WITH (NOLOCK) INNER JOIN table2 PV WITH(NOLOCK) on po.col2=PV.col3 WHERE PV.col1 = 70 AND PV.col4 in(11, 73, 74, 75, 76, 77, 79, 80) AND PV.col5 IN (23)) SELECT *,4910093 AS TotalRows FROM TempResult WHERE Row >= 1 AND Row <=100 
+0

Покажите нам определения таблиц (и индексы) и ваш запрос. – jarlh

+5

'предлагать лучшие способы сделать это .... лучше, чем один? Показать ваш запрос? –

+0

Пейджинг применяется по этому запросу. каждый раз, когда мне нужна запись, мне нужно запустить этот запрос. есть ли способы хранения данных в temdb на пользователя –

ответ

0

Работа с тем, что вы предоставили до сих пор ...

Удалены IN от PV.col5 и заменен на =.

Добавлен BETWEEN во второе предложение WHERE.

; WITH TempResult AS (
     SELECT ROW_NUMBER() OVER(ORDER BY col1 DESC) AS Row, col12 
     FROM table1 po WITH (NOLOCK) 
     INNER JOIN table2 PV WITH(NOLOCK) ON po.col2 = PV.col3 
     WHERE PV.col1 = 70 
     AND PV.col4 IN (11, 73, 74, 75, 76, 77, 79, 80) 
     AND PV.col5 = 23) 
SELECT *, 4910093 AS TotalRows 
FROM TempResult 
WHERE Row BETWEEN 1 AND 100 
+0

Я использую здесь, потому что col5 может иметь несколько значений. –

0

Использование индексирования в ваших таблицах. Время может резко снизиться.

+0

уже индексированы в моей таблице. У меня есть 7-8 некластеризованных индекс в моей таблице. Если те же условия и сортировка относятся к таблице, то я не хочу снова запускать этот запрос. есть ли способ сохранить данные этого запроса в таблице, и он сохраняется только для этого пользователя –

0

У меня есть 2 ниже пунктов, чтобы поделиться с вами относительно ниже.

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

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

Пожалуйста, обратитесь к приведенной ниже ссылке. http://www.codeproject.com/Articles/199058/SQL-Server-Indexed-Views-Speed-Up-Your-Select-Quer

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