为数据库项目创建正确索引并不简单。需要考虑许多因素:
l 数据库的数据模型
l 表中数据的数量和分布
l 对数据库执行哪些查询
l 查询发生的频率
l 数据更新的频率
为了帮助我们设计索引,SQL Server提供了一个称为“数据库引擎优化顾问”的工具。数据库引擎优化顾问需要一个工作负荷文件,该文件可以是包含需要优化的语句的一个文本文件,也可以是SQL Server Profiler生成的一个跟踪文件。随后,“数据库引擎优化顾问”会使用SQL Server 查询优化器和已有的数据库为数据库物理设计结构提出更改建议,例如创建、更改或删除各种索引。
Ø 使用“数据库引擎优化顾问”
1. 打开SQL Server Management Studio。打开“新建查询”窗口并更改数据库上下文为“AdventureWorks”。
2. 键入并执行以下语句,将使用这些语句来通过“数据库引擎优化顾问”优化数据库。以下代码包含在示例文件UsingDatabaseEngineTuningAdvisor.sql中。
USE AdventureWorks;
SELECT o.SalesOrderID, o.OrderDate, od.ProductID
FROM dbo.Orders o INNER JOIN dbo.OrderDetails od
ON o.SalesOrderID = od.SalesOrderID
WHERE o.SalesOrderID = 43659;
SELECT o.SalesOrderID, o.OrderDate, od.ProductID
FROM dbo.Orders o INNER JOIN dbo.OrderDetails od
ON o.SalesOrderID = od.SalesOrderID
WHERE o.SalesOrderID BETWEEN 43659 AND 44000;
3. 为了将这段脚本存为一个工作负荷文件,需要打开“文件”菜单并选择“另存为”并指定文件名称为dta.sql。
4. 在SQL Server Management Studio中,在“工具”菜单上选择“数据库引擎优化顾问”。连接到SQL Server实例。
5. 选择在步骤3存储的文件作为工作负荷文件并选择数据库“AdventureWorks”作为要优化的数据库。如图6.20所示。
图6.20 选择要优化的数据库
6. 按工具条上的“开始分析”按钮。
7. 在分析完成之后,窗口中将显示建议,如图6.21所示。
8. “数据库引擎优化顾问”建议创建两个索引。可以在“操作”菜单中选择“保存建议”来保存生成索引的脚本。
9. 关闭“数据库引擎优化顾问”。
可以看出,SQL Server会尽可能地优化这两个查询。只有在这两个查询应该被优化并且对它们的优化对数据库的其他操作没有什么影响的时候,才能体现出查询优化的好处。为了优化所有的数据库索引,最好使用SQL Server Profiler 追踪,它会为“数据库引擎优化顾问”提供一个数据库的常规工作负荷。借助于这些信息,“数据库引擎优化顾问”可以根据数据库中的其他负荷来优化查询。在分析完工作负荷后,务必保存并查看建议。
图6.21 显示建议