2
ทำไมดัชนีของฉันไม่ถูกใช้ใน SELECT TOP?
นี่คือการทำงานที่ลดลง: ฉันกำลังทำแบบสอบถามเลือก ทุกคอลัมน์ในWHEREและส่วนORDER BYคำสั่งจะอยู่ในดัชนีที่ไม่ใช่คลัสเตอร์IX_MachineryId_DateRecordedเดียวซึ่งเป็นส่วนหนึ่งของคีย์หรือเป็นINCLUDEคอลัมน์ ฉันกำลังเลือกคอลัมน์ทั้งหมดเพื่อที่จะส่งผลให้มีการค้นหาบุ๊กมาร์ก แต่ฉันกำลังทำอยู่TOP (1)ดังนั้นเซิร์ฟเวอร์จึงสามารถบอกได้ว่าการค้นหาจำเป็นต้องทำเพียงครั้งเดียวในตอนท้าย สิ่งสำคัญที่สุดคือเมื่อฉันบังคับให้แบบสอบถามใช้ดัชนีIX_MachineryId_DateRecordedมันจะทำงานในเวลาน้อยกว่าหนึ่งวินาที ถ้าฉันปล่อยให้เซิร์ฟเวอร์ตัดสินใจว่าจะใช้ดัชนีใดมันจะเลือกIX_MachineryIdและใช้เวลาประมาณหนึ่งนาที ที่แนะนำให้ฉันจริง ๆ ว่าฉันได้ทำดัชนีถูกต้องและเซิร์ฟเวอร์เพิ่งตัดสินใจไม่ถูกต้อง ทำไม? CREATE TABLE [dbo].[MachineryReading] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Location] [sys].[geometry] NULL, [Latitude] FLOAT (53) NOT NULL, [Longitude] FLOAT (53) NOT NULL, [Altitude] FLOAT (53) NULL, [Odometer] INT NULL, [Speed] FLOAT (53) NULL, [BatteryLevel] INT …