count,size,length到底有什么区别呢?通过以下的测试结果可以发现问题:
Post.find_by_id(953125641).comments.length产生了如下的SQL语句
[4;35;1mPost Columns (0.000000)[0m [0mSHOW FIELDS FROM `posts`[0m
[4;36;1mPost Load (0.016000)[0m [0;1mSELECT * FROM `posts` WHERE (`posts`.`id` = 953125641) LIMIT 1[0m
[4;35;1mComment Load (0.016000)[0m [0mSELECT * FROM `comments` WHERE (`comments`.post_id = 953125641) [0m
Post.find_by_id(953125641).comments.size产生了如下的SQL语句
[4;36;1mPost Columns (0.000000)[0m [0;1mSHOW FIELDS FROM `posts`[0m
[4;35;1mPost Load (0.016000)[0m [0mSELECT * FROM `posts` WHERE (`posts`.`id` = 953125641) LIMIT 1[0m
[4;36;1mComment Columns (0.000000)[0m [0;1mSHOW FIELDS FROM `comments`[0m
[4;35;1mSQL (0.015000)[0m [0mSELECT count(*) AS count_all FROM `comments` WHERE (`comments`.post_id = 953125641) [0m
Post.find_by_id(953125641).comments.count产生了如下的SQL语句
[4;36;1mPost Columns (0.000000)[0m [0;1mSHOW FIELDS FROM `posts`[0m
[4;35;1mPost Load (0.015000)[0m [0mSELECT * FROM `posts` WHERE (`posts`.`id` = 953125641) LIMIT 1[0m
[4;36;1mComment Columns (0.000000)[0m [0;1mSHOW FIELDS FROM `comments`[0m
[4;35;1mSQL (0.016000)[0m [0mSELECT count(*) AS count_all FROM `comments` WHERE (`comments`.post_id = 953125641) [0m
@post = Post.find_by_id(953125641)
@length = @post.comments.length产生了如下的SQL语句
[4;35;1mPost Columns (0.000000)[0m [0mSHOW FIELDS FROM `posts`[0m
[4;36;1mPost Load (0.000000)[0m [0;1mSELECT * FROM `posts` WHERE (`posts`.`id` = 953125641) LIMIT 1[0m
[4;35;1mComment Load (0.000000)[0m [0mSELECT * FROM `comments` WHERE (`comments`.post_id = 953125641) [0m
@post = Post.find_by_id(953125641)
@length = @post.comments.size产生了如下的SQL语句
[4;36;1mPost Columns (0.015000)[0m [0;1mSHOW FIELDS FROM `posts`[0m
[4;35;1mPost Load (0.016000)[0m [0mSELECT * FROM `posts` WHERE (`posts`.`id` = 953125641) LIMIT 1[0m
[4;36;1mComment Columns (0.000000)[0m [0;1mSHOW FIELDS FROM `comments`[0m
[4;35;1mSQL (0.000000)[0m [0mSELECT count(*) AS count_all FROM `comments` WHERE (`comments`.post_id = 953125641) [0m
@post = Post.find_by_id(953125641)
@length = @post.comments.count产生了如下的SQL语句
[4;36;1mPost Columns (0.015000)[0m [0;1mSHOW FIELDS FROM `posts`[0m
[4;35;1mPost Load (0.000000)[0m [0mSELECT * FROM `posts` WHERE (`posts`.`id` = 953125641) LIMIT 1[0m
[4;36;1mComment Columns (0.000000)[0m [0;1mSHOW FIELDS FROM `comments`[0m
[4;35;1mSQL (0.000000)[0m [0mSELECT count(*) AS count_all FROM `comments` WHERE (`comments`.post_id = 953125641) [0m
@post = Post.find_by_id(953125641)
@comments = @post.comments
@length = @comments.count产生了如下的SQL语句
[4;36;1mPost Columns (0.000000)[0m [0;1mSHOW FIELDS FROM `posts`[0m
[4;35;1mPost Load (0.016000)[0m [0mSELECT * FROM `posts` WHERE (`posts`.`id` = 953125641) LIMIT 1[0m
[4;36;1mComment Columns (0.000000)[0m [0;1mSHOW FIELDS FROM `comments`[0m
[4;35;1mSQL (0.000000)[0m [0mSELECT count(*) AS count_all FROM `comments` WHERE (`comments`.post_id = 953125641) [0m
@post = Post.find_by_id(953125641)
@comments = @post.comments
@length = @comments.length产生了如下的SQL语句
[4;36;1mPost Columns (0.015000)[0m [0;1mSHOW FIELDS FROM `posts`[0m
[4;35;1mPost Load (0.000000)[0m [0mSELECT * FROM `posts` WHERE (`posts`.`id` = 953125641) LIMIT 1[0m
[4;36;1mComment Load (0.000000)[0m [0;1mSELECT * FROM `comments` WHERE (`comments`.post_id = 953125641) [0m
@post = Post.find_by_id(953125641)
@comments = @post.comments
@length = @comments.size产生了如下的SQL语句
[4;35;1mPost Columns (0.016000)[0m [0mSHOW FIELDS FROM `posts`[0m
[4;36;1mPost Load (0.000000)[0m [0;1mSELECT * FROM `posts` WHERE (`posts`.`id` = 953125641) LIMIT 1[0m
[4;35;1mComment Columns (0.015000)[0m [0mSHOW FIELDS FROM `comments`[0m
[4;36;1mSQL (0.000000)[0m [0;1mSELECT count(*) AS count_all FROM `comments` WHERE (`comments`.post_id = 953125641) [0m
@post = Post.find_by_id(953125641)
@comments = @post.comments.find(:all)
@length = @comments.size产生了如下的SQL语句
[4;35;1mPost Columns (0.015000)[0m [0mSHOW FIELDS FROM `posts`[0m
[4;36;1mPost Load (0.032000)[0m [0;1mSELECT * FROM `posts` WHERE (`posts`.`id` = 953125641) LIMIT 1[0m
[4;35;1mComment Load (0.000000)[0m [0mSELECT * FROM `comments` WHERE (`comments`.post_id = 953125641) [0m
由以上的测试数据表明: #count方法总是会产生count(*)的SQL语句去查询数据库,而#length方法总是取查询出的集合的个数,它总是不会产生count(*)的查询,#size方法就比较好了,如果目标集合还没有取出来,它会像#count方法一样,产生count(*)的查询,如果记录已经取出来了,它就像#length方法一样,直接读取集合的个数了。
基于以上的分析,结论:虽然以上三种方法都可以取得数据记录的个数,但是还是要根据根据实际所需要,调用相应的方法,以达到优化。
- 浏览: 29345 次
- 性别:
文章分类
- 全部博客 (35)
- web开发 (24)
- html (13)
- ruby (15)
- ruby,jQuery (3)
- rake (3)
- ruby,日期显示 (1)
- 个人日志 (3)
- web开发,rails (1)
- 个人日志, (1)
- git,ruby,git提交,github (1)
- delay,Delayed job,异步处理 (1)
- checked,js (1)
- web开发,类方法,实例方法 (1)
- web开发,正则 (1)
- git (1)
- git分支与合并 (1)
- 阻断Time (1)
- count (1)
- length (1)
- size (1)
- nil? (2)
- empty? (2)
- present? (2)
- 科学技术 (1)
- 笔记 (1)
- inject (1)
- 互联网 (3)
- 收藏 (1)
- node (1)
- SpookyJS (1)
- 页面定位 (1)
发表评论
-
页面定位个人笔记
2014-12-02 11:21 480$('.mCSB_container').css('top ... -
锚点快速定位到页面中指定位置
2014-12-01 17:03 11171、通过scrollIntoView方法来实现定位: &l ... -
自动化测试工具小记:node + SpookyJS + CasperJS + PhantomJS
2014-11-14 10:45 2252概述 这是一个跨度很 ... -
cookie缓存
2014-11-11 17:07 677Cookie是HTTP协议中非常重要的东西, 之前拜读了F ... -
Ruby的.nil? .empty? .blank? .present?区别
2014-11-07 09:50 1029.nil? , .empty? .blank? .pres ... -
数组生成哈希表的方法示例
2014-10-21 23:03 487以下是从数组生成哈希表的方法示例 由[索引, 值, ... -
cron定时任务
2014-09-04 15:16 888转载自http://blog.csdn.net/wangju ... -
ruby ,rake个人笔记
2014-08-27 00:22 935Rake 是 Ruby 领域的 Make,是个独立的 Rub ... -
个人总结
2014-08-25 09:28 488总结一下用到的学到的东西 了解了一下接口文档 post ... -
js,html日期显示
2014-08-18 23:25 524对页面的关于时间的显示的小总结 下面要显示时间 #{bu ... -
TDD测试驱动开发
2014-06-01 21:48 1092TDD是Test Driven Dev ... -
三种数据结构
2014-05-26 12:38 856第一种数据结构: activities = [ ... -
代码重构
2014-05-25 00:42 506重构就是在不改变软 ... -
打包应用程序并安装在android器上测试
2014-05-24 23:34 810做好的party_bid或其他应用程序需要放在 ... -
用angular-js实现web开发的mvc框架
2014-05-19 12:27 1092在 AngularJS 里,View 和 Model 是在 ... -
bootstrap模态框简单设计
2014-04-29 21:46 1201模态框 模态对话框(Modal Dialogu ... -
web数据存储
2014-04-18 18:49 935数据存取 1. ... -
web首张卡开发须知
2014-04-09 21:56 4591.css样式的引用 将写好的样式引入到ruby编 ... -
web开发中的linux环境配置
2014-04-01 21:09 777Linux环境变量配置 linux系统有32位和64位之 ... -
html关于文字,背景,列表的相关代码
2014-03-23 17:39 7303.12 设置基底网址<base> ...
相关推荐
在众多的压缩算法中,Run Length Encoding(RLE)是一种简单且高效的无损压缩方法。本文将深入探讨RLE编码的概念、原理、C++实现以及其在实际应用中的价值。 **一、RLE编码概述** Run Length Encoding(RLE)是...
Run Length Encoding(RLE)是一种简单的无损数据压缩算法,常用于处理连续重复的数据,比如图像数据中的背景颜色。在图像处理中,如果一个颜色连续出现多次,通过记录该颜色出现的次数,而不是连续写入相同的像素值...
Status DeleteK(SqList &a,int ... if(va.length+1>va.listsize) return ERROR; va.length++; for(i=va.length-1;va.elem[i]>x&&i>=0;i--) va.elem[i+1]=va.elem[i]; va.elem[i+1]=x; return OK; }//Insert_SqList
JavaScript中的数组也有一个`length`属性,如`arr.length`,可以获取数组的大小。 5. **C#**: C#与Java类似,数组也具有`length`属性。例如,`arr.Length`将返回数组的元素数量。 6. **Objective-C/Swift**: ...
return count == arrayLength; } public int size() { return count; } } ``` 在上面的代码中,我们使用一个数组 `array` 来存储队列中的元素,并使用 `head` 变量来记录队列的头部元素的索引,使用 `trail` ...
2. **数组长度**: Java中的数组也有长度属性,可以通过`length`字段来访问。例如,对于一个整数数组: ```java int[] array = new int[5]; int arrayLength = array.length; System.out.println("数组长度为: " + ...
java编的五子棋 import java.util.*; import java.io.*; import java.awt.*;... if(x+displace_x>=0 && x+displace_x<length && y+displace_y>=0 && y+displace_y<length && grid[x+displace_x][y+...
int readLength = Math.Min(_blockLength, (int)(count - index)); stream.Read(clientData, 0, readLength); fs.Write(clientData, 0, readLength); index += readLength; } fs.Close(); } return true; }...
SourceStream.Read(Buffer[0], Length(Buffer), Count); DestStream.Write(Buffer[0], Count); Offset += Count; end; finally SourceStream.Free; DestStream.Free; end; end; ``` 在这个改进版本中,我们...
= 0) throw new ArgumentException("Byte array length must be a multiple of the size of MyStruct"); int count = bytes.Length / Marshal.SizeOf(); MyStruct* structArray = stackalloc MyStruct[count]; ...
length / ( 1024 * 1024 * 1024 ), 2), 'G') idx,CONCAT(ROUND(( data_length + index_length ) / ( 1024 * 1024 * 1024 ), 2),'G') total_size,ROUND(index_length / data_length, 2) idxfracFROM information_...
- `size_type find(const char *str, size_type index, size_type length);`:查找指定长度的子串。 - `size_type find(char ch, size_type index);`:查找单个字符`ch`。注意,`index`应为`string::size_type`...
* max_error_count * max_execution_time * max_heap_table_size * max_join_size * max_length_for_sort_data * max_points_in_geometry * max_seeks_for_key * max_sort_length * optimizer_prune_level * ...
if (src.length - srcPos < length || dst.length - dstPos < length) { throw new StringIndexOutOfBoundsException(length); } for (int i = 0; i < length; i++) { dst[dstPos++] = src[srcPos++]; } } ...
unsigned char Spi_Read_Packet(unsigned char *Rx_buffer,unsigned char length); void Spi_Write_Packet(unsigned char *Tx_buffer,unsigned char size) ; void Spi_Write_Burst(unsigned char addr,unsigned char...
有时候有些属性是有优先级顺序的,那么按照优先级排序也是一种非比较的排序方法。 - **要点**: - 通过多次按照关键字排序,每次排序针对的是某一位上的数字; - 需要一个稳定的内部排序算法。 - **实现**: ``...
if (size <= Count) { Count -= size;}`来替代,后者没有除法操作,执行效率更高。 优化除法运算的一种常见方法是用乘法替换除法。在表达式`radius = circle_length / (2 * PI)`中,可以定义一个宏`#define PI_...
本示例将探讨iOS系统自带的加密算法——DES(Data Encryption Standard)以及BASE64编码技术,这两种技术在iOS应用开发中都有广泛应用。 首先,我们来了解**BASE64编码**。BASE64是一种常见的字符编码方式,主要...
Bitset(const std::string & str, size_t _Pos, size_t _Count); public: size_t size()const; //返回设置为1的位数 size_t count() const; bool subscript(size_t _Pos) const; bool get(size_t pos) const; ...
.text, let length = text.count, length > currentLength { currentLength = length if currentLength > maxLength { // 阻止输入或删除最后一个字符 textInput?.text = String(text.prefix(maxLength)) ...