Create table:
CREATE TABLE AGENTS
( AGENT_CODE CHAR(6) NOT NULL PRIMARY KEY,
AGENT_NAME CHAR(40),
WORKING_AREA CHAR(35),
COMMISSION INT,
PHONE_NO CHAR(15),
COUNTRY NVARCHAR(25)
);
Put data into it:
INSERT INTO AGENTS VALUES ('A007', 'Ramasundar', 'Bangalore', '15', '077-25814763', '');
INSERT INTO AGENTS VALUES ('A003', 'Alex ', 'London', '13', '075-12458969', '');
INSERT INTO AGENTS VALUES ('A008', 'Alford', 'New York', '12', '044-25874365', '');
INSERT INTO AGENTS VALUES ('A011', 'Ravi Kumar', 'Bangalore', '15', '077-45625874', '');
INSERT INTO AGENTS VALUES ('A010', 'Santakumar', 'Chennai', '14', '007-22388644', '');
INSERT INTO AGENTS VALUES ('A012', 'Lucida', 'San Jose', '12', '044-52981425', '');
INSERT INTO AGENTS VALUES ('A005', 'Anderson', 'Brisban', '13', '045-21447739', '');
INSERT INTO AGENTS VALUES ('A001', 'Subbarao', 'Bangalore', '14', '077-12346674', '');
INSERT INTO AGENTS VALUES ('A002', 'Mukesh', 'Mumbai', '11', '029-12358964', '');
INSERT INTO AGENTS VALUES ('A006', 'McDen', 'London', '15', '078-22255588', '');
INSERT INTO AGENTS VALUES ('A004', 'Ivan', 'Torento', '15', '008-22544166', '');
INSERT INTO AGENTS VALUES ('A009', 'Benjamin', 'Hampshair', '11', '008-22536178', '');
Create a Non-Clustered index on column AGENT_CODE
and include AGENT_NAME
.
CREATE NONCLUSTERED INDEX [NON_CLUS_IX_AGENTS_AGENTCODE_AGENTNAME]
ON [dbo].[AGENTS] ([AGENT_CODE])
INCLUDE (AGENT_NAME)
GO
If I select the AGENT_CODE
and AGENT_NAME
columns only, why SQL server is using the clustered index seek, instead of Non clustered scan?
However, if I select data without a Where
clause, it then selects data using a clustered scan. Why SQL server does not uses the Non clustered index at first, even if we have all the columns that are being requested by the query are present within Non clustered index data strructure.