SQL оптимизация запроса для запроса выбора по запросу IN - PullRequest
0 голосов
/ 26 марта 2020

У меня есть одно представление, я хочу добавить логику нумерации страниц c в этом представлении. Есть более 1,5 миллионов записей. Потребовалось больше времени, чтобы получить результат, если для моего условия «где» выбираются только указанные c записи, сопоставленные с одним идентификатором. Я думаю о том, чтобы получить только эти сопоставленные записи из основной таблицы, а затем выбрать только те записи из представления, будет ли это быстрее?

Select top 10 col1, col2, col3, ROW_NUMBER() OVER (ORDER BY col4 desc) from vMyView where someid=1

Тогда

Select top 10 col1, col2, col3 from vMyView where col1 in (Select col1 from tMyTable where someid=1)

К вашему сведению, я не эксперт

1 Ответ

0 голосов
/ 26 марта 2020

Предполагая типичное количество элементов, я обычно пишу это так:

select top 10 col1, col2, col3 
from vMyView v
inner join tMyTable t ON t.col1 = v.col1
WHERE t.someid = 1

Однако, если возможно сопоставить более одной строки в tMyTable для каждого значения col1 в vMyView это может привести к дублированию строк из vMyView. Если возможно дублирование строк, решение, основанное на row_number(), как правило, является самым быстрым вариантом.


Я хочу добавить логику нумерации страниц c в этом представлении

Что касается подкачки, вам следует изучить синтаксис OFFSET/FETCH, а не TOP n.

SELECT col1, col2, col3
FROM vMyView v
ORDER BY <need an order by clause for paging to work>
OFFSET <pagenumber * pagesize> FETCH NEXT <pagesize> ROWS ONLY
...