2009-01-13 36 views

Trả lời

40

Rất tiếc, không rõ bạn đang hỏi gì.

Bạn có yêu cầu, nó sẽ tăng tốc độ truy vấn như

SELECT product, sum(quantity) FROM receipts 
GROUP BY product 

nếu bạn thêm một chỉ số về số lượng?

Nếu đó là câu hỏi thì câu trả lời là không. Nói chung, các chỉ mục hữu ích khi bạn cần tìm một vài hàng trong số rất nhiều; ở đây bạn cần tất cả các hàng, vì vậy một chỉ mục không giúp được gì.

Có một ngoại lệ tối nghĩa (áp dụng rất ít khi hầu hết trình tối ưu hóa DB có thể không bận tâm triển khai thủ thuật này). Nếu truy vấn của bạn sẽ xảy ra là

SELECT sum(foo) FROM bar 

, nơi có một chỉ mục trên foo, và quầy bar là một bảng với nhiều cột, người ta có thể đọc trong chỉ mục đầy đủ, phải gánh chịu một hit nhỏ hơn nếu bạn đọc bảng bên dưới và nhận câu trả lời trực tiếp từ chỉ mục - không bao giờ phải chạm vào bảng "thực" ở tất cả! Đây là một trường hợp khá hiếm, tuy nhiên, và bạn sẽ muốn thử nghiệm rằng trình tối ưu hóa của bạn biết làm điều này trước khi dựa vào điều này quá nhiều.

+1

+1 vì đó là cách sử dụng chỉ mục thú vị. – NotMe

+1

+1 Lời khuyên tốt: để xem kế hoạch thực hiện được trình tối ưu hóa tạo ra. –

+0

Điều này có đúng không - các chỉ mục đó có thể không ảnh hưởng đến hiệu suất SUM không?Điều gì sẽ xảy ra nếu chúng ta đang sử dụng chỉ mục bộ lọc cho biết giá trị IS NOT NULL? Và khi chúng ta đang sử dụng mệnh đề WHERE để chỉ SUM giá trị cụ thể, liệu chỉ mục có giúp được không? – gotqn

7

No. Chỉ mục cải thiện tìm kiếm bằng cách giới hạn số lượng séc được yêu cầu. Một hàm tổng hợp (đếm, max, min, sum, avg) phải chạy qua tất cả các mục trong một cột bất kể.

+0

Nhưng nếu tất cả các cột đó hiện diện trong chính chỉ mục, bảng thực sự không cần truy cập, làm cho tổng nhanh hơn so với trường hợp không có chỉ mục –

4

Nếu bạn muốn tổng kết nhanh hơn, bạn có thể thực hiện trước kết quả. Trên Oracle, sử dụng Materialized Views, trên MS SQL sử dụng Indexed Views.

On câu hỏi cụ thể của bạn "là tạo ra một chỉ số cho một cột đang được tóm tắt được nhanh hơn không có chỉ mục?", Câu trả lời là số

Câu trả lời cho câu hỏi của bạn nằm trên Spencer câu trả lời:

"Một hàm tổng hợp (đếm, max, min, tổng, avg) phải chạy qua tất cả các mục trong một cột được tổng hợp bất kể".

Chỉ cần làm rõ bối cảnh cột trong câu trả lời của Spencer. Câu trả lời của anh là chính xác.

0

Nếu chỉ mục bị che phủ, thông thường sẽ nhanh hơn. Làm thế nào nhanh hơn nhiều sẽ được xác định bởi sự khác biệt giữa số cột trong bảng so với số trong chỉ mục. Ngoài ra, nó có thể nhanh hơn nếu có bất kỳ tiêu chí lọc nào.

0

tôi thấy lập chỉ mục một cột trong nơi (ProductID đây) giúp khi sử dụng truy vấn này:

CHỌN productid, sum (số lượng) TỪ biên lai ĐÂU productid = 1 GROUP BY productid

Một trong những thắc mắc của tôi đã đi từ 45 giây đến gần như ngay lập tức khi tôi thêm chỉ mục.

+1

Với một ID sản phẩm duy nhất, bạn có cần ID sản phẩm trong danh sách SELECT không? –

+1

vâng nhưng như SquareCog đã nói, việc thêm chỉ mục vào productid sẽ giúp bởi vì bạn đang tìm các hàng dựa trên productid. Câu hỏi, trong trường hợp của bạn, liệu việc thêm chỉ mục về số lượng có giúp được không – alex9311

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