ตามPro SQL Server Internalsโดย Dmitri Korotkevitch :
กริยาการค้นหา ARLEGLE ABLE เป็นสิ่งที่ SQL Server สามารถใช้การดำเนินการค้นหาดัชนีได้หากมีดัชนีอยู่
เพรดิเคต SARGable เป็นหนึ่งที่เซิร์ฟเวอร์ SQL สามารถแยกค่าเดียวหรือช่วงของค่าคีย์ดัชนีในการประมวลผล
ภาค SARGable รวมถึงผู้ประกอบการดังต่อไปนี้: =
, >
, >=
, <
, <=
, IN
, BETWEEN
และLIKE
( ในกรณีของการจับคู่คำนำหน้า )
ผู้ประกอบการที่ไม่ใช่ SARGable รวมถึง: NOT
, NOT IN
, <>
และLIKE
( ไม่ตรงกับคำนำหน้า ) เช่นเดียวกับการใช้ฟังก์ชั่นหรือการคำนวณกับตารางและแปลงชนิดที่ประเภทข้อมูลไม่ปฏิบัติตามดัชนีที่สร้างขึ้น
ตัวอย่าง :
WHERE name like 'SARGable%'
WHERE name like '%non-SARGable%'
ตัวอย่าง :
DROP TABLE dbo.Testing;
GO
CREATE TABLE Testing (
WeirdDatatype int NOT NULL,
SomethingElse char(200)
);
CREATE NONCLUSTERED INDEX IDX_ALWAYS_SARGable
ON dbo.Testing( SomethingElse);
CREATE NONCLUSTERED INDEX IDX_NOT_ALWAYS_SARGable
ON dbo.Testing(SomethingElse);
INSERT INTO dbo.Testing
( WeirdDatatype, SomethingElse )
SELECT TOP 1000 m.message_id, CONVERT(char(200), m.text)
FROM sys.messages AS m;
ตอนนี้เรารัน:
SELECT *
FROM dbo.Testing AS t
WHERE t.WeirdDatatype = 1001;
SELECT *
FROM dbo.Testing AS t
WHERE t.SomethingElse LIKE 'Line%'
SELECT *
FROM dbo.Testing AS t
WHERE t.SomethingElse LIKE '%Line%'
AND t.WeirdDatatype = 1001;
ผลลัพธ์ที่ได้คือ:
ลองดูคุณสมบัติของแบบสอบถาม SARGable (ดัชนีค้นหา)
เครื่องมือเพิ่มประสิทธิภาพคิวรีสามารถกำหนดขีด จำกัด ในดัชนีของจุดเริ่มต้นและจุดสิ้นสุด มันมีอาร์กิวเมนต์ค้นหาเพื่อสอบถามด้วย
ตอนนี้แบบสอบถามที่ไม่ใช่ SARGable:
คุณสามารถเห็นการเริ่มต้นของเพรดิเคต '% non .. %' ไม่อนุญาตให้เคียวรีเครื่องมือเพิ่มประสิทธิภาพ DEFINE เริ่มต้นและสิ้นสุดหรือช่วงในดัชนี ตอนนี้จะต้องค้นหาทั้งตาราง (สแกน)