2010-07-17 42 views
16

gì là tốt nhất về hiệu suất với quyết tâm nếu một mục tồn tại hay không đặc biệt nếu bảng chứa hơn 700.000 hàngCách tốt nhất để kiểm tra xem mục có tồn tại hay không: Chọn Đếm (ID) HOẶC Hiện tại (...)?

if (Select count(id) from Registeration where email='[email protected]') > 0 
    print 'Exist' 
else 
    print 'Not Exist' 

HOẶC

if Exists(Select id from Registeration where email='[email protected]') 
    print 'Exist' 
else 
    print 'Not Exist' 

Trả lời

28

EXISTS, luôn

  • COUNT địa chỉ sẽ đi ngang qua bảng hoặc chỉ mục: bạn đã yêu cầu COUNT
  • EXISTS sẽ dừng ngay khi tìm thấy hàng

Chỉnh sửa, phải rõ ràng

Tất nhiên, trong trường hợp này nếu cột email là duy nhất và lập chỉ mục sẽ được gần gũi.

Nói chung, EXISTS sẽ sử dụng ít tài nguyên hơn và chính xác hơn. Bạn đang tìm kiếm sự tồn tại của một hàng, không phải là "nhiều hơn số không" ngay cả khi chúng giống nhau

Edit2: Trong EXISTS, bạn có thể dùng NULL, 1, ID hoặc thậm chí 1/0: nó không phải là kiểm tra ...

21 tháng 5 năm 2011 sửa:

Nó trông như thế này đã được tối ưu hóa trong SQL server 2005 + để COUNT địa chỉ tại là giống như tồn tại trong trường hợp này

+2

+1. Tuy nhiên, trong ví dụ đơn giản, nếu 'email' được lập chỉ mục, sự khác biệt nên quá nhỏ để không thể giải thích được. – Toby

+0

@Toby: Đúng vậy. Tôi đã chỉnh sửa khi bạn đăng. – gbn

4

cũng mất trong việc xem xét rằng Count() chỉ trả về int trong đó nếu bạn tính một số dữ liệu vượt quá int thì sẽ tạo ra lỗi

+1

có, nếu bạn có nhiều hơn 2 tỷ hàng, thì bạn nên sử dụng 'count_big' hoặc tương đương RBMS của bạn. – Donnie

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