星期五, 5月 03, 2024

[SQL] Like - 萬用字元和 Index Seek

在社群內看見討論,提到 LIKE 'A_E%' 是跑 Index Scan,但因為是以 A 為開頭字串,直覺是會跑 Index Seek 才是,來測試看看
USE AdventureWorks2022
GO

DROP INDEX IF EXISTS [IX_LastName] ON Person.Person

CREATE INDEX IX_LastName ON Person.Person (LastName)

SELECT
	BusinessEntityID ,
	LastName
FROM Person.Person
-- 單一字元
WHERE LastName LIKE 'A_E%'
-- 相符字元
WHERE LastName LIKE 'A[a-Z]E%'
-- 不相符
WHERE LastName LIKE 'A[^0-9]E%'


上述三種 LIKE 條件皆可以跑出 Index Seek,第一位字元為 A 是關鍵啦

沒有留言:

張貼留言