SQL
ハンズオン#1 — Index Seekが出るケース
出典: SQL Server 実行計画の読み方 — Estimated vs Actual で業務SE が最初に見る5箇所 — ハンズオン#1 — Index Seekが出るケース
--準備:通常テーブル+インデックス+ 1万件投入+統計更新
IF OBJECT_ID('dbo.tmp_orders','U')IS NOT NULL DROP TABLE dbo.tmp_orders;
CREATE TABLE dbo.tmp_orders (id INT IDENTITY PRIMARY KEY, customer_id INT, amount INT);
CREATE INDEX IX_customer ON dbo.tmp_orders(customer_id);
WITH n AS (
SELECT TOP(10000)ROW_NUMBER()OVER (ORDER BY (SELECT 1))AS r
FROM sys.all_objects a CROSS JOIN sys.all_objects b
)
INSERT INTO dbo.tmp_orders (customer_id, amount)
SELECT (r % 1000)+ 1, (r * 7)% 9999 FROM n;
UPDATE STATISTICS dbo.tmp_orders;
GO
--実行計画を取る
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM dbo.tmp_orders WHERE customer_id = 1;
GO
SET SHOWPLAN_TEXT OFF;
GO
▸ 実行ボタンで結果を表示
Source収録記事
この snippet は記事の「ハンズオン#1 — Index Seekが出るケース」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
5 件SET SHOWPLAN_TEXT ON; GO SELECT * FROM dbo.tmp_orders WHERE customer_id = 1; GO
▶ 実行可
SET SHOWPLAN_TEXTで実行計画を取る
#73565946edca
|--Nested Loops(Inner Join, OUTER REFERENCES:([id])) |--Index Seek(OBJECT:([IX_customer]), SEEK:([customer_id]=(1))) |--Clustered Index Seek(OBJECT:([PK__tmp_orders]), SEEK:([id]=[id])LOOKUP)未収録
ハンズオン#1 — Index Seekが出るケース
#baf135028100
IF OBJECT_ID('dbo.tmp_products','U')IS NOT NULL DROP TABLE dbo.tmp_products; CREATE TABLE dbo.tmp_products (id INT IDENTITY PRIMARY KEY, name NVARCHAR(50), price INT); INSERT INTO dbo.tmp_products (name, price)VALUES (N'apple', 100),(N'banana', 200),(N'cherry', 300),(N'durian', 400);未収録
ハンズオン#2 — Clustered Index Scanが出るケース
#6a3025feb9a9
SET STATISTICS PROFILE ON; SELECT * FROM dbo.tmp_orders WHERE customer_id = 1; SET STATISTICS PROFILE OFF;
▶ 実行可
② Estimated rowsとActual rowsの乖離
#2094ae3368eb
-- ✗ Index効かない WHERE CONVERT(VARCHAR, created_at, 23)= '2026-05-15' -- ✓ Index効く未収録
④ WHERE列を関数で潰してる
#ba63e096cd59
