why does my clustered index scan have ordered = false

It just means that the query optimiser doesn't require an explicit order guarantee either for some later operator in the plan (e.g. merge join or stream aggregate) or to avoid a sort because you have explicitly requested an order by.

When ordered = false you might in some circumstances get an allocation ordered scan rather than a scan that follows the linked list of the leaf pages in index key order for example.


I believe the Ordered portion of an index scan is just indicative of whether or not your query is ordered by the index key column(s).

Say you have something like this:

-- Table Definition for reference
CREATE TABLE [HumanResources].[Employee](
    [EmployeeID] [int] IDENTITY(1,1) NOT NULL,
    [NationalIDNumber] [nvarchar](15) NOT NULL,
    [ContactID] [int] NOT NULL,
    [LoginID] [nvarchar](256) NOT NULL,
    [ManagerID] [int] NULL,
    [Title] [nvarchar](50) NOT NULL,
    [BirthDate] [datetime] NOT NULL,
    [MaritalStatus] [nchar](1) NOT NULL,
    [Gender] [nchar](1) NOT NULL,
    [HireDate] [datetime] NOT NULL,
    [SalariedFlag] [dbo].[Flag] NOT NULL,
    [VacationHours] [smallint] NOT NULL,
    [SickLeaveHours] [smallint] NOT NULL,
    [CurrentFlag] [dbo].[Flag] NOT NULL,
    [rowguid] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
    [ModifiedDate] [datetime] NOT NULL,
 CONSTRAINT [PK_Employee_EmployeeID] PRIMARY KEY CLUSTERED 
(
    [EmployeeID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO



use AdventureWorks
go

select *
from HumanResources.Employee

This would be a clustered index scan with Ordered = False. But modify it to look like this:

use AdventureWorks
go

select *
from HumanResources.Employee
order by EmployeeID

You will then have Ordered = True because you are ordering by the index key column.

But if you have something like this (ORDER BY on a non-key column):

use AdventureWorks
go

select *
from HumanResources.Employee
order by ContactID

Then Ordered = False because the sorting isn't based on the index key column(s).