在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