2009-12-12 54 views

Trả lời

149
SELECT COUNT(*) FROM fooTable; 

sẽ đếm số hàng trong bảng.

Xem reference manual.

+6

Có nhanh hơn khi tôi sử dụng tên của cột được lập chỉ mục thay vì * không? Như thế này: CHỌN COUNT (id) TỪ 'tablename' –

+1

Chỉ một chút. Tôi có một bảng hàng 21961904 mà COUNT truy vấn của mình trong 115 giây, trong khi sử dụng ID mất 107 giây. – NargothBond

+1

COUNT (\ *) là định nghĩa ngôn ngữ nghiêm ngặt. Bạn sẽ nhận được một lỗi phân tích cú pháp nếu bạn thử COUNT (\ *) lưu ý không gian – ppostma1

5

Đơn giản chỉ cần:

SELECT COUNT(*) FROM `tablename` 
4
select count(*) from YourTable 
16

Chúng tôi có một cách khác để tìm ra số lượng hàng trong một bảng với ra chạy chọn truy vấn trên bảng đó.

Mỗi cá thể mysql đều có cơ sở dữ liệu information_schema. Nếu bạn chạy truy vấn sau, nó sẽ cung cấp chi tiết đầy đủ về bảng bao gồm gần đúng số số hàng trong bảng đó.

select * from information_schema.TABLES where table_name = 'table_name'\G 
+0

Điều này có nhanh hơn trên bảng MyISAM vì MyISAM đang lưu trữ số hàng không? – NaturalBornCamper

+0

Tôi chưa bao giờ thử nghiệm điều này trên MyISAM. –

1
$sql="SELECT count(*) as toplam FROM wp_postmeta WHERE meta_key='ICERIK' AND post_id=".$id; 
$total = 0; 
$sqls = mysql_query($sql,$conn); 
if ($sqls) { 
    $total = mysql_result($sqls, 0); 
}; 
echo "Total:".$total;` 
32

Bởi vì không ai đề cập đến nó:

show table status; 

danh sách tất cả các bảng cùng với một số thông tin bổ sung, bao gồm hàng ước tính cho mỗi bảng. Đây là những gì phpMyAdmin đang sử dụng cho trang cơ sở dữ liệu của nó.

Thông tin này có sẵn trong MySQL 4, có thể trong MySQL 3.23 - cơ sở dữ liệu lược đồ thông tin trước thời gian dài.

CẬP NHẬT

Bởi vì có xuống bỏ phiếu, tôi muốn làm rõ rằng số hiển thị được ước tính chỉ dành cho InnoDB và TokuDB và nó là hoàn toàn chính xác cho MyISAM và công cụ lưu trữ Aria (Maria).

Đây cũng là cách nhanh nhất để xem số liên tiếp trên MySQL, vì truy vấn như:

select count(*) from table; 

Làm bảng quét toàn bộ những gì có thể hoạt động rất tốn kém mà có thể mất hàng giờ trên máy chủ tải cao lớn. Nó cũng tăng đĩa I/O.

Thao tác tương tự có thể chặn bảng để chèn và cập nhật - điều này chỉ xảy ra trên các công cụ lưu trữ kỳ lạ.

InnoDB và TokuDB là OK với bảng khóa, nhưng cần quét toàn bộ bảng.

+2

Điều này giống như cách hiệu quả nhất để đếm các hàng. Tôi tự hỏi tại sao nó không phải là câu trả lời? Tôi đang sử dụng InnoDB. Với khóa bàn, số lượng hàng phải chính xác? –

+0

đối với innodb nó được ** ước tính **. nhưng bạn có thể sử dụng nó trong một số trường hợp "Trang web của chúng tôi có xxx thành viên", "Chúng tôi đã phát hiện các kết quả xxx tương tự như của bạn" và cứ tiếp tục như vậy. – Nick

+0

Tôi không chắc chắn. nhưng đối với Innodb thì không phải là số thực. Nhưng khá hữu ích cho hàng triệu bảng. – Nick

2

Bạn phải sử dụng count() trả về số hàng phù hợp với một tiêu chí quy định

select count(*) from table_name; 
-3

Đây là một trường hợp đặc biệt. Nếu bạn không bao giờ xóa dữ liệu khỏi bảng, bạn chỉ có thể sử dụng cột auto_incrementid để đếm số hàng. Vui lòng đảm bảo rằng id không được đặt thủ công khi chèn dữ liệu vào bảng này. Thao tác này chỉ mất một phần nghìn giây.

SELECT id FROM table ORDER BY id DESC LIMIT 1; 
+1

Điều này thực sự cần tránh, nó sẽ trở lại ám ảnh bạn một ngày .. – AndrewMcLagan

+0

Không bao giờ sử dụng một kludge –

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