2009-09-10 46 views
5

Là một bài tập (đọc: phỏng vấn câu hỏi) trong tối ưu hóa chỉ mục, tôi cần truy vấn chậm trên cơ sở dữ liệu AdventureWorks tiêu chuẩn trong SQL2005. Tất cả các truy vấn tôi đã thử mất khoảng 1 giây và tôi muốn có một truy vấn mất nhiều giây để nó có thể được tối ưu hóa hiệu quả.Tôi cần truy vấn chậm trên AdventureWorks (SQL 2005)

Có ai ở đây có thể tạo truy vấn như vậy hoặc cung cấp cho tôi các gợi ý về cách tạo truy vấn chậm không? Tôi chỉ dường như không thể thực hiện truy vấn của tôi không performant :)

+2

de-tối ưu hóa sớm là gốc của tất cả ... –

Trả lời

9

Ở đây bạn có danh sách các bảng cơ sở dữ liệu với hầu hết các hàng:

Tables - Rows count 
Sales.SalesOrderDetail - 121317 
Production.TransactionHistory - 113443 
Production.TransactionHistoryArchive - 89253 
Production.WorkOrder - 72591 
Production.WorkOrderRouting - 67131 
Sales.SalesOrderHeader - 31465 
Sales.SalesOrderHeaderSalesReason - 27647 
Person.Contact - 19972 
Person.Address - 19614 
Sales.CustomerAddress - 19220 
Sales.Customer - 19185 
Sales.ContactCreditCard - 19118 
Sales.CreditCard - 19118 
Sales.Individual - 18484 
Sales.CurrencyRate - 13532 

Bạn có thể thử biến thể khác nhau sử dụng mà bảng. Ví dụ: truy vấn này:

SELECT * FROM Sales.SalesOrderDetail s 
INNER JOIN Production.Product p ON s.ProductID = p.ProductID 

chạy trong 9 giây tại máy tính của tôi.

Bạn có thể chạy này:

SELECT * FROM Production.TransactionHistory th 
INNER JOIN Production.TransactionHistoryArchive tha ON th.Quantity = tha.Quantity 

Nội tham gia vào bảng unindexed. Ví dụ rất nhân tạo, nhưng bây giờ phải mất hơn 2 phút để cuộn trên máy của tôi. Bây giờ - hơn 20 phút. Hiện tại - 1h 20 phút.

+0

thậm chí tốt hơn, thêm "WHERE ListPrice> 1000" hoặc một cái gì đó, vào cột chưa được lập chỉ mục. – BradC

+0

@Lukasz - truy vấn chạy trong 9 giây (3 trên máy của tôi) vì nó trả về hơn 100000 hàng, không phải vì bận rộn đang cố gắng quét bảng. Cả hai bảng đã có chỉ mục trên ProductID vì vậy tôi không thể cải thiện nhiều. – rein

+0

@BradC - đây là cách tiếp cận chính xác (lọc theo cột chưa được lập chỉ mục hoặc tốt hơn, tham gia bằng cột không được lập chỉ mục) nhưng tiếc là tôi không thể đạt được điểm mà tôi mang lại hiệu suất kém . – rein

0

thử sử dụng truy vấn con tương quan với một trong các bảng hoặc con trỏ đó.

Các vấn đề liên quan