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方法一样,直接读取集合的个数了。
基于以上的分析,结论:虽然以上三种方法都可以取得数据记录的个数,但是还是要根据根据实际所需要,调用相应的方法,以达到优化。
count,size,length到底有什么区别
最新推荐文章于 2025-03-24 20:31:26 发布
本文详细解析了SQL查询中的count、size、length方法的区别及应用场景,通过实例展示了如何根据需求选择合适的查询方式以优化查询效率。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
Stable-Diffusion-3.5
图片生成
Stable-Diffusion
Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

427

被折叠的 条评论
为什么被折叠?



