Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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中对同一个表进行双连接,性能问题_Sql_Join_Relation - Fatal编程技术网

在SQL中对同一个表进行双连接,性能问题

在SQL中对同一个表进行双连接,性能问题,sql,join,relation,Sql,Join,Relation,我对一个特定的问题有疑问,但我会概括,因为这是一个普遍的问题 我有(总结)下图 Main_Table Doctors -------------- --------------- PK ID PK ID_Doctor ID_Prescribing_Doctor Name ID_Perform

我对一个特定的问题有疑问,但我会概括,因为这是一个普遍的问题

我有(总结)下图

Main_Table                            Doctors
--------------                        ---------------
PK ID                                 PK ID_Doctor
   ID_Prescribing_Doctor                 Name
   ID_Performer_Doctor
然后,在一个查询中,我必须将Main_表与医生连接起来,以便在每一行中显示两个姓名(来自处方和医生)

因此:

查询工作正常。我正在检索我想要的所有数据。 但是,存在一个性能问题

主表(大部分)有10.000.000行。 医生表(大部分)有20000行

当它进行连接时,它需要时间

我还尝试创建具有以下字段的视图:

ID_Prescriber | Name_Prescriber | ID_Performer | Name_Performer
让一个人加入

然而,考虑到表有近20000行,视图检索了近400000行。因此,性能变得更差

我想知道是否有一种方法可以实现这一点,而不需要对同一个表进行两次联接

我在其他期刊上读到的所有答案都是关于两个连接的

更多信息

考虑到给出的答案,恐怕我没有解释清楚。此线程的目的不是为特定问题寻找解决方案,而是了解某些场景(如上面提出的场景)的解决方案,在这些场景中,您必须创建两个到同一个表的连接

总之,我想知道是否有其他方法来解决这类问题,只是为了得到一系列的解决方案,然后根据情况应用最佳解决方案。


我提出这个具体问题的原因是为了提供一些背景,而不是一个空洞的问题。但是解决这个问题不是问题。

您正在检索10000000行。这需要时间。如果您有相同的联接,则视图不应返回比查询更多的行。您的查询没有筛选谓词/条件。这意味着您正在从次表中检索主表的所有行以及伴随的行。那是一千万行。从定义上讲,这肯定是缓慢的。我想这是为了批量处理,因为在网上这样做没有太多意义,对吧?谢谢你的回答。是的,我没有检索所有的行(每次),它应用了大量的筛选和组。这就是为什么我说‘我会概括’。不管上下文如何,我想知道是否有办法避免创建两个联接。@GreatNews问题不在于联接,而在于简单的主键查找。这很可能是因为您对筛选和分组所依据的内容缺乏适当的索引。我们需要看一个“大量筛选和组”的示例和
explain
的输出来说明更多内容。您正在检索10000000行。这需要时间。如果您有相同的联接,则视图不应返回比查询更多的行。您的查询没有筛选谓词/条件。这意味着您正在从次表中检索主表的所有行以及伴随的行。那是一千万行。从定义上讲,这肯定是缓慢的。我想这是为了批量处理,因为在网上这样做没有太多意义,对吧?谢谢你的回答。是的,我没有检索所有的行(每次),它应用了大量的筛选和组。这就是为什么我说‘我会概括’。不管上下文如何,我想知道是否有办法避免创建两个联接。@GreatNews问题不在于联接,而在于简单的主键查找。这很可能是因为您对筛选和分组所依据的内容缺乏适当的索引。我们需要看一个“大量过滤和分组”的例子,以及
explain
的输出来说明更多。
ID_Prescriber | Name_Prescriber | ID_Performer | Name_Performer