2011-09-27 11 views
6

Tôi đang tìm cách nhanh nhất để kiểm tra nhập tồn tại ...Cách nhanh nhất để kiểm tra mục nhập đó tồn tại trong cơ sở dữ liệu là gì?

Tất cả cuộc sống của tôi, tôi đã làm với một cái gì đó như thế này ...

SELECT COUNT(`id`) FROM `table_name` 

Một số người không sử dụng COUNT(id), nhưng COUNT(*). Có nhanh hơn không?

Điều gì về LIMIT 1?

P.S. Với id Tôi có nghĩa là khóa chính, tất nhiên.

Cảm ơn lời khuyên!

+0

Bạn nên sử dụng SELECT COUNT (1) FROM table_name –

+3

Cách nhanh nhất để kiểm tra hàng tồn tại trong bảng hoặc nhanh cách để kiểm tra xem một bảng trong cơ sở dữ liệu có> 0 hàng không? –

Trả lời

7

Trong hầu hết các tình huống, COUNT(*) nhanh hơn COUNT(id) trong MySQL (vì cách truy vấn nhóm với COUNT() là được thực hiện, nó có thể được tối ưu hóa trong các phiên bản tương lai để cả hai phiên bản đều chạy như nhau). Nhưng nếu bạn chỉ muốn tìm thấy nếu ít nhất một dòng tồn tại, bạn có thể sử dụng EXISTS

đơn giản:

(SELECT COUNT(id) FROM table_name) > 0 

nhanh hơn một chút:

(SELECT COUNT(*) FROM table_name) > 0 

nhanh hơn nhiều:

EXISTS (SELECT * FROM table_name) 
+0

Tôi có thể sử dụng 'WHERE' x' = 'abc'' với ví dụ này không? Điều gì về 'LIMIT 1'? Có lẽ nó cũng làm tăng hiệu suất? – daGrevis

+0

Bạn có thể sử dụng bất kỳ điều kiện phức tạp nào trong số này (WHERE, multiple JOINs). Nếu 'id' không phải là nullable, tất cả 3 là tương đương (một trong số chúng trả về TRUE hoặc FALSE ở cùng một tình huống). –

+1

'EXISTS' thực sự hoạt động như' LIMIT 1'. Khi một hàng được tìm thấy phù hợp với tiêu chí, nó sẽ ngừng tìm kiếm thêm. –

5

Nếu bạn không lo lắng về độ chính xác, explain select count(field) from table cực kỳ nhanh.

http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/

liên kết này giải thích sự khác biệt giữa count(*)count(field). Khi nghi ngờ, count(*)

Như để kiểm tra xem một bảng không có sản phẩm nào ...

SELECT EXISTS(SELECT 1 FROM table)