使用SQL Query Analyzer和SQL Profiler
这些范例使用 Northwind 数据库中的 Orders 数据表。现在来检视这个数据表的组织。这个信息会帮助确定 Query Optimizer 是否选择了适当的执行计划。Orders 数据表在 OrderID 一栏中有一个名为 PK_Orders 的丛集索引,另外还有八个其它的索引,如图35-6中的 Manage Indexes 对话框所示。(要存取这个对话框,请在 Enterprise Manager中,展开一个服务器组,展开一个服务器,展开 数据库 数据夹,展开 Northwind 数据库,然后选取 数据表 数据夹。在右侧窗格中的 Orders 数据表上按鼠标右钮,并从快捷菜单中选择 所有工作 ,接着选择 治理索引 。或者只要从 Query Analyzer 工具 菜单中直接选择 治理索引 ,接着从下拉式菜单中选择 Orders 数据表。) 本文来自织梦
图35-6 治理索引对话框
检视计划和修改 SELECT 陈述式
本节中,这个查询的范例要求获得关于订单的信息,这些订单是由职员 ID 为 4的职员储存的。请在 Qery Analyzer 输入以下查询,并执行 显示评估的执行计划 :
SELECT OrderID, CustomerID, EmployeeID, OrderDate
FROM orders
WHERE EmployeeID = 4
在该职员的组织中,每个职员处理订单的一小部分,因此可能需要 SQL Server在进行查询时使用 EmployeeID索引。但是,Query Analyzer 显示的却是 SQL Server 使用的存取方法是 PK_Orders 丛集索引,如图35-7中的 评估的执行计划 窗格所示。 织梦好,好织梦
图35-7 评估的执行计划窗格显示了使用 PK_Orders 丛集索引。
要 Query Optimizer 使用 EmployeeID 索引,可以使用 SELECT 陈述式的提示(hint),程序代码如下(提示将在本章的 <使用提示> 一节中讨论。):
SELECT OrderID, CustomerID, EmployeeID, OrderDate
FROM orders WITH (INDEX ( EmployeeID))
WHERE EmployeeID = 4
________________________________________
说明
在 SQL Server 7 中,较好用的索引提示是 INDEX=index_name。
在 SQL Server 2000 中,较好用的索引提示是 INDEX(index_name)。
________________________________________
透过这个信息,可以指示 Query Optimizer 使用所需要的执行计划,而不是 Query Optimizer 选择的计划。调整过的评估执行计划窗格如图35-8所示。可以从显示的数据存取方法中看到,使用的是 EmployeeID 索引,然后传回一个书签搜寻(bookmark lookup),该查询将获得来自数据库的数据。(书签搜寻搜索一列数据的内部识别码。) 本文来自织梦
图35-8 调整过后的评估执行的计划窗格
Query Optimizer 是一个有效率的工具,以不断的更新统计数据,提供选择最佳的执行计划。由于不同的公司行号可能更清楚自己的组织和数据,所以某些情况下,公司可以选择比 Query Optimizer 更有效率的最佳执行计划。
________________________________________
注重
使用提示代替 Query Optimizer 的选择时,必须承担变更可能带来的风险。虽然数据遗失或损毁的机率不大,不过可能对系统的执行效能产生的是负面的影响。
________________________________________
检视联结操作
执行联结操作比执行选取操作多出了更过的执行过程,稍后会在评估执行的计划窗格中看到。联结操作会对数个数据表进行存取的动作,并在存取后组合所搜寻的数据。(联结在 第 14 章 中讨论)。请在 Query Analyzer 输入以下的联结操作范例:
SELECT OrderID, CustomerID, Employees.EmployeeID, FirstName,
LastName, OrderDate
FROM Orders Join Employees ON Orders.EmployeeID = Employees.
EmployeeID
之前的陈述式包括 SQL-92 JOIN 操作元。建议使用此操作元在 SQL Server 2000中执行连结。下面的陈述式使用较传统的连结语法: copyright dedecms
SELECT OrderID, CustomerID, Employees.EmployeeID, FirstName,
文章评论
共有位Admini5网友发表了评论 查看完整内容