У меня есть несколько звездочек, которым нужна временная таблица.Чтобы не жестко кодировать типы столбцов (которые являются varchar некоторой длины), поэтому мне не нужно изменять объявления при изменении схемы ссылочной таблицы (т. Е. Поля становятся длиннее), я делаю это (вместо вызова создания таблицы):
select orderId
into #sometmptbl
from orders
where 1=2
Однако, когда вы делаете showplan для этого, на самом деле, кажется, он идет к таблице / индексу:
QUERY PLAN FOR STATEMENT 1 (в строке 1).
STEP 1
The type of query is CREATE TABLE.
STEP 2
The type of query is INSERT.
The update mode is direct.
FROM TABLE
orders
Nested iteration.
Index : orders_idx1
Forward scan.
Positioning at index start.
Index contains all needed columns. Base table will not be read.
Using I/O Size 2 Kbytes for index leaf pages.
With LRU Buffer Replacement Strategy for index leaf pages.
TO TABLE
#sometmptbl
Using I/O Size 2 Kbytes for data pages.
Общая оценочная стоимость ввода-вывода для оператора 1 (в строке 1): 632082.
Означает ли это, что 1 = 2 оценивается для каждой записи в индексе?Есть ли способ сделать это в постоянное время?
Обновление :
Вот фактическая стоимость ввода-вывода после выполнения, так что похоже, что фактические чтениядействительно 0, так что никакого влияния на производительность нет:
Table: orders scan count 0, logical reads: (regular=0 apf=0 total=0), physical reads: (regular=0 apf=0 total=0), apf IOs used=0
Table: #sometmptbl_____00002860018595346 scan count 0, logical reads: (regular=1 apf=0 total=1), physical reads: (regular=0 apf=0 total=0), apf IOs used=0
Total actual I/O cost for this command: 2.
Total writes for this command: 3
0 row(s) affected.