Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询速度:Java中的多查询与排序_Java_Sql_Database - Fatal编程技术网

SQL查询速度:Java中的多查询与排序

SQL查询速度:Java中的多查询与排序,java,sql,database,Java,Sql,Database,假设我有一个包含两列的表: 城市 (某人的)姓名 我还有一个Java“city”对象,它包含: 城市名称 那个城市所有人的名单 现在我有两个选项来获取数据: 首先使用DISTINCT获得所有城市的列表。然后,对于每个城市,再次查询数据库,使用WHERE仅获取该人居住在该城市的记录。然后我可以将其存储在城市对象中 使用ORDER BY to ORDER BY城市名称获取所有数据的列表。然后循环遍历所有记录并开始将它们存储在城市对象中。当我检测到城市名称发生变化时,我可以创建一个新的城市对象并将记录

假设我有一个包含两列的表:

  • 城市
  • (某人的)姓名 我还有一个Java“city”对象,它包含:

  • 城市名称
  • 那个城市所有人的名单
  • 现在我有两个选项来获取数据:

  • 首先使用DISTINCT获得所有城市的列表。然后,对于每个城市,再次查询数据库,使用WHERE仅获取该人居住在该城市的记录。然后我可以将其存储在城市对象中
  • 使用ORDER BY to ORDER BY城市名称获取所有数据的列表。然后循环遍历所有记录并开始将它们存储在城市对象中。当我检测到城市名称发生变化时,我可以创建一个新的城市对象并将记录存储在其中

  • 以下哪种方法更快/更好?或者有没有比这两种方法更好的方法来获取这些信息?我正在使用Oracle数据库。

    数据库查询是一项相对昂贵的操作-您需要通过网络与另一台服务器通信,然后它可能需要访问其磁盘、计算结果、将结果返回给您等等。您希望尽可能减少这些操作。拥有一个查询并检查其结果比拥有多个查询要好得多,除非你有一些致命的理由不这么做——这里似乎不是这样,至少从你共享的信息来看不是这样。

    排序答案是#2。您希望对数据库进行尽可能少的查询#2如果我没有弄错,你将创建一个城市/人的连接,然后创建对象

    更好的方法:使用JPA/Hibernate。i、 e检查

    在所有情况下,答案编号#2都是最佳的

    您需要用Java编写逻辑代码,以便在从一个城市切换到下一个城市时进行区分


    或者,如果您使用MyBatis,那么使用“集合”解决方案会变得非常简单。它们执行单个数据库调用,并检索指定的整个Java树,包括多个级别中的所有子列表。性能非常好,也很容易编码。

    您在这里混合了ORM和原始SQL的内容,我无法理解您的问题。你到底想做什么?首先,我建议你用SQL做这类东西,但是为什么你要做多个查询来得到结果呢?这似乎是可行的,只需一个查询#2。请注意,您可以在Java代码中使用
    Map
    ,不需要使用
    orderby
    。@Henkan问题表示
    DISTINCT
    WHERE
    、和
    orderby
    ,这表明问题是关于SQL的,所以说“我建议使用SQL制作这种东西”有点多余此外,OP在#2中已经谈到了单查询解决方案,所以说“一个查询似乎可行”有点多余你的评论是多余的,我没有试图回答这个问题:哪一个更好?@Andreas我想我的评论是不清楚的:我知道它将使用SQL,我的意思是,对我来说,如果可能的话,当然,进行一个返回准确所需结果的查询比获取一些数据然后用代码处理这些数据要好。所以这就是为什么我推荐SQL.JPA/Hibernate不是一个更好的方法。我想这是我的观点。我想是的。你能解释一下为什么不是吗?因为仅仅为问题中描述的问题添加JPA/Hibernate是过分的另外,我不相信用
    class city{String name;List personNames;}
    创建表city\u person(city\u name VARCHAR(50),person\u name VARCHAR(50))映射到
    列表
    是直接的。这里的关键词是“你相信”和“你不相信”。在我看来,对于现代java项目,bestaproach正在追随JPA,因为我的猜测是,应用程序将不会简单地有两个实体。按照您提到的映射方法,他可能很快就会意识到需要使用定制的比较器和排序器,因为java中的字符串比较将通过词典进行。随着数据的增长,他可能需要分页。我坚信,对于现代应用来说,JPA是一种进步,尤其是因为最终他希望拥有JavaPOJO。