2011-09-15 34 views
6

Tôi có một số câu lệnh SELECT trên trang PHP và tôi đã sử dụng Dreamweaver để tạo các báo cáo đó.mysql_num_rows() php - nó có hiệu quả không?

Sau khi xem xét mã mà nó tạo ra, dường như có rất nhiều lông tơ mà tôi có thể cắt ra trong hầu hết các trường hợp, một dòng mysql_num_rows() cho mỗi câu lệnh là một ví dụ. Vì vậy, tôi tự hỏi nếu có ai có thể cho tôi biết liệu điều này có thực sự tiết kiệm tài nguyên hay không - xem xét truy vấn đang được chạy không phân biệt, có bất kỳ chi phí thực tế nào cho điều này không? Không.


UPDATE: Sau khi làm theo gợi ý Chriszuma về microtime, đây là kết quả của tôi:

//time before running the query 
1: 0.46837500 1316102620 

//time after the query ran 
2: 0.53913800 1316102620 

//time before calling mysql_num_rows() 
3: 0.53914200 1316102620 

//time after mysql_num_rows() 
4: 0.53914500 1316102620 

Vì vậy, không có nhiều chi phí ở tất cả, có vẻ như

+0

Luôn luôn có phí trên một cuộc gọi hàm trong PHP, nhưng nó thường là tối thiểu, trừ khi bạn gọi nó hàng trăm nghìn lần ... – DaveRandom

Trả lời

3

Tôi hy vọng rằng một cuộc gọi như vậy sẽ có tác động cực kỳ tối thiểu đến hiệu suất. Nó chỉ là đếm các hàng của kết quả truy vấn được lưu trữ nội bộ của nó. Bản thân truy vấn SQL sẽ chiếm phần lớn thời gian xử lý.

Nếu bạn muốn biết chắc chắn, bạn có thể thực hiện microtime() trước và sau cuộc gọi để xem chính xác thời gian cần thực hiện.

$startTime = microtime(true); 
mysql_num_rows(); 
$time = microtime(true) - $startTime; 
echo("mysql_num_rows() execution: $time seconds\n"); 

Nghi ngờ của tôi là bạn sẽ thấy điều gì đó trong phạm vi micro giây.

+1

điều này làm việc mặc dù tôi đã làm một bài kiểm tra nhanh chóng và bẩn trong khi bạn đang viết mã chỉ được gọi là microtime() của chính nó mỗi lần :) – jammypeach

4

mysql_num_rows() đếm hàng sau chúng đã được tìm nạp. Nó giống như bạn lấy tất cả các hàng và lưu trữ chúng trong một mảng PHP, và sau đó chạy count($array). Nhưng mysql_num_rows() được thực hiện trong C trong thư viện máy khách MySQL, vì vậy nó sẽ hiệu quả hơn một chút so với mã PHP tương đương.

Lưu ý rằng để mysql_num_rows() hoạt động, bạn phải có kết quả đầy đủ của truy vấn trong không gian bộ nhớ của PHP. Vì vậy, có chi phí theo nghĩa là tập kết quả truy vấn có thể lớn và chiếm nhiều bộ nhớ.

+1

+1 Đó là lý do tại sao 'mysql_num_rows' sẽ không hoạt động khi bạn sử dụng [mysql_unbuffered_query] (http://php.net/manual/en/function.mysql-unbuffered-query. php) – webbiedave

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