在一些Rails代码中,我找到了以下几行:
User.where('created_at >= ?', '2018-10-10').count
# which results in:
SELECT COUNT(*) FROM "users" WHERE (created_at >= '2018-10-10')
=> 1234
User.where('users.created_at >= ?', '2018-10-10').count
# which results in:
SELECT COUNT(*) FROM "users" WHERE (users.created_at >= '2018-10-10')
=> 1234
是否有使用什么区别WHERE users.created_at和WHERE created_at?
第一种方法:
SELECT * from xzqhdm as xz where xz.shape is not null and EXISTS (select ci.id from t_city as ci where st_intersects(ci.geom,xz.shape) LIMIT 1) LIMIT 10000
查询10000个点用了3.7秒,当只查询点信息,这种方式是最快的(不输出面信息)
查询方式和程序中处理比较像:
外层循环取出一个值与内层循环中的值比较,有一个如何,则将外层的数据加入到一个返回变量中,最后返回这个变量
第二种
select * from xzqhdm xz left JOIN t_city as ci on st_intersects(ci.geom,xz.shape) where xz.shape is not null LIMIT 10000
查询10000 个点用了13秒,比第一种慢,但是会携带面信息
查询方式,利用左连接,将两张表以包含关系结合然会返回需要的条数
第三种
如果数据变化不大的情况,可以将这种关联关系事先存在一张表中,可以达到毫秒级查询速度,数据变动之后,根据变化的数据更新关系即可
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。