Ubuntu 上 SQL Server 索引优化实用指南
一 索引设计原则
二 查询写法与索引利用
WHERE YEAR(OrderDate)=2024),否则通常无法使用索引;改写为区间条件(如 WHERE OrderDate >= '2024-01-01' AND OrderDate < '2025-01-01')。LIKE 'abc%' 可利用索引;LIKE '%abc%' 通常导致索引失效,可改用全文索引或其他检索方案。ORDER BY 列上的索引),避免全表排序。三 维护与统计
四 监控与诊断
五 实用 SQL 示例
CREATE INDEX IX_Orders_CustomerID
ON dbo.Orders(CustomerID);
CREATE INDEX IX_Orders_CustomerID_OrderDate
ON dbo.Orders(CustomerID, OrderDate)
INCLUDE (TotalAmount) -- 覆盖列,减少回表
WITH (FILLFACTOR = 90); -- 写密集可适当降低填充因子
CREATE INDEX IX_OrderItems_OrderID
ON dbo.OrderItems(OrderID);
-- 前缀匹配可利用索引
SELECT OrderID, OrderDate
FROM dbo.Orders
WHERE OrderNo LIKE 'SO2025%';
-- 避免对列做函数:改写为区间条件
SELECT OrderID, OrderDate
FROM dbo.Orders
WHERE OrderDate >= '2025-01-01'
AND OrderDate < '2025-02-01';
-- 假设查询:SELECT OrderID, CustomerID, TotalAmount
-- FROM dbo.Orders
-- WHERE CustomerID = @cid AND OrderDate >= @d1 AND OrderDate < @d2
CREATE INDEX IX_Orders_Cover
ON dbo.Orders(CustomerID, OrderDate)
INCLUDE (TotalAmount);