Để nói rằng SELECT COUNT(*) vs COUNT(1)
kết quả trong DBMS của bạn trở về " cột "là giường thuần túy. Đó thể đã là trường hợp lâu, rất lâu nhưng bất kỳ truy vấn tối ưu tự trọng sẽ chọn một số phương pháp nhanh để đếm số hàng trong bảng - có NO chênh lệch hiệu suất giữa SELECT COUNT(*), COUNT(1), COUNT('this is a silly conversation')
Hơn nữa, SELECT(1) vs SELECT(*)
sẽ KHÔNG có bất kỳ sự khác biệt trong việc sử dụng INDEX - hầu hết DBMS sẽ thực sự tối ưu hóa SELECT(n) into SELECT(*)
anyway. Xem ASK TOM: Oracle đã được tối ưu hóa SELECT(n) into SELECT(*)
cho phần tốt hơn một thập kỷ, nếu không muốn nói còn: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1156151916789
vấn đề là ở count (col) để đếm () chuyển đổi ** 03/23/00 05:46 pm *** một cách giải quyết là đặt sự kiện 10122 thành tắt tính (col) -> đếm () tối ưu hóa.Một công việc khác là để thay đổi số đếm (col) để đếm (), nó có nghĩa là giống nhau, khi col có giới hạn NOT NULL. Số lỗi là 1215372.
Một điều cần lưu ý - nếu bạn đang sử dụng COUNT (col) (! Không) và col là rõ rệt NULL, sau đó nó sẽ thực sự có để đếm số lần xuất hiện trong bảng (hoặc thông qua quét chỉ mục, biểu đồ, vv nếu chúng tồn tại, hoặc quét toàn bộ bảng khác).
Bottom line: nếu những gì bạn muốn là số lượng hàng trong một bảng, sử dụng COUNT địa chỉ (*)
Nguồn
2008-09-12 16:12:59
Không đúng khi nói rằng không có sự khác biệt giữa lựa chọn (n) và chọn (*). Nếu bạn có chỉ mục bao gồm n, bạn sẽ lấy dữ liệu trực tiếp từ cấp độ lá của chỉ mục và không phải quay lại bảng, nhanh hơn nhiều. –
Trình tối ưu hóa DBMS * sẽ * nhận ra điều này và chọn chỉ mục chính xác cho công việc. Miễn là có một chỉ số, hiếm hoi là ngày mà tôi đã nhìn thấy một DBMS thực sự ** đếm ** hàng trên bàn. Hơn nữa, sự hiện diện của NULL thường gây ra lỗi ngữ nghĩa. Khi bạn muốn số hàng trong bảng, hãy sử dụng COUNT (*) !!! –