8
Tôi chỉ muốn biết cái nào là nhanh nhất.giới hạn so với số tồn tại so với (*) so với số (id) trong MySQL
Điều tôi đang cố làm là chỉ kiểm tra xem dữ liệu có tồn tại trên bảng hay không. Tôi đã sử dụng "LIMIT" phần lớn thời gian nhưng theo ý kiến của bạn hoặc nếu bạn có cơ sở, cái nào là nhanh nhất để kiểm tra xem dữ liệu có tồn tại hay không.
Ví dụ:
giới hạn 1:
SELECT ID
FROM TABLE
WHERE ID=1 LIMIT 1;
tồn tại:
SELECT EXISTS(
SELECT *
FROM TABLE
WHERE ID=1);
count (*):
SELECT (*)
FROM TABLE;
count (ID):
SELECT (ID)
FROM TABLE;"
bổ sung: Tôi đang sử dụng InnoDB.
'SELECT 1 TỪ
SELECT ID FROM TABLE LIMIT 1 - TABLE là tên bảng.: D – Echusen
Trả lời
Giới hạn luôn là nhanh nhất vì nó lặp lại một dòng của bảng.
Hiện tại có rất ít sự khác biệt với Giới hạn bởi vì bạn chỉ cần thêm một câu lệnh chọn khác, chúng tôi có thể nói nó có hiệu quả giống như câu lệnh đầu tiên.
Đếm sẽ lặp lại tất cả bảng và đếm kết quả. Khi bạn sử dụng số (), theo mặc định, mysql đếm khóa chính của bảng. Tôi đã thực hiện một số thử nghiệm đếm (id), đếm (), đếm (trường) và đếm (1) trong bảng lớn, không có sự khác biệt lớn. Theo tôi, 'đếm' sẽ luôn cố gắng đếm chỉ số trừ khi trường bạn đếm không phải là chỉ mục, nhưng nhiều người nói rằng chúng ta nên sử dụng số (id) thay vì sử dụng số đếm (*).
Trong một bảng nhỏ, bốn cách đều hoạt động tốt. Nhưng nếu bạn tham gia với một số bàn lớn, đếm sẽ mất một thời gian rất dài.
Vì vậy, trong tất cả, thời gian sử dụng là count (*)> count (id) >> tồn tại> giới hạn
Nguồn
2013-11-15 10:20:50 user2208436
lời giải thích tốt đẹp 'bro ..: D, tôi khách, tôi sẽ dính vào LIMIT – Echusen
Tôi nghĩ rằng tất cả đều ổn; ngoại trừ tôi sẽ xóa các điều khoản
WHERE ID = 1
. Nếu bạn đã từng xóa bảng và bắt đầu chèn lại thìID
1 sẽ không tồn tại. Chỉ cầnLIMIT 1
sẽ thực hiện thủ thuật. Cá nhân tôi không ủng hộ các tùy chọnexists
vàcount(*)
. Tôi thíchcount(ID)
sau đó, như bạn thường sẽ có một chỉ số trênID
vì vậy tôi mong đợi rằng để chạy khá nhanh chóng. Để chắc chắn, bạn sẽ phải dành thời gian cho chúng (trên một bàn rất lớn) - Tôi mong đợi chúng xuất hiện một cái gì đó nhưexists
,limit 1
,count(id)
,count(*)
từ nhanh nhất đến chậm nhất. (Tôi nghi ngờ về cácexists
mặc dù - nếu nó thực sự đánh giá toàn bộSELECT *
nó có thể đi ra tồi tệ nhất).Nguồn
2013-11-15 09:34:25 CompuChip
Tôi nghĩ rằng TS muốn kiểm tra xem một hàng cụ thể có tồn tại trong bảng hay không, nếu không tồn tại hàng, và tôi giả sử '1' chỉ là một ví dụ – Martijn
Trong trường hợp đó không phải tất cả bốn câu lệnh mà ông cung cấp đều tương đương, nên làm rõ! – CompuChip
Các vấn đề liên quan