mysql中连接多个表的替代方法

mysql中连接多个表的替代方法,mysql,Mysql,我正在编写一个查询,其中需要内部连接16个以上的表。 查询的执行时间太长,我也在不同的列上添加了索引,但仍然面临同样的问题 有谁能建议最好的替代方案吗 我有一种CMS,我们有与产品相关的不同类型的信息 如类别、带有产品映射的类别、项目类型、类型映射、语言、语言映射等 我的表是完全规范化的,数据库模式设计没有问题。我读到,连接七个以上的表是不可取的 我对您的模式一无所知,但我想知道视图是否对您有所帮助。我认为除了连接之外没有其他选择。但根据您的要求,在某些情况下,您可以使用左连接而不是内连接 您还

我正在编写一个查询,其中需要内部连接16个以上的表。 查询的执行时间太长,我也在不同的列上添加了索引,但仍然面临同样的问题

有谁能建议最好的替代方案吗

我有一种CMS,我们有与产品相关的不同类型的信息 如类别、带有产品映射的类别、项目类型、类型映射、语言、语言映射等


我的表是完全规范化的,数据库模式设计没有问题。

我读到,连接七个以上的表是不可取的


我对您的模式一无所知,但我想知道视图是否对您有所帮助。

我认为除了连接之外没有其他选择。但根据您的要求,在某些情况下,您可以使用左连接而不是内连接


您还可以设置EXISTS和NOT EXISTS的条件,但这只是一个猜测,不需要查看模式

如果数据库布局要求您在获得所需数据之前进行16次连接,那么问题不在于连接,而在于数据库布局。尝试重新思考数据库,使用非规范化步骤,但在某一点停止。根据数据库的使用情况,您不应该过多地去规范化。
如果不能对数据库进行返工,那么我将研究物化视图或中间表。将部分数据合并到一个新视图或表中,并在查询中使用该表。当然,此表需要定期更新,这取决于所需的数据“新鲜度”。如果要使用视图,则在请求时收集数据,但这当然会带来额外的性能成本

我认为您应该在表之间绘制简单连接,然后开始构建查询,第一次可能看起来很混乱,但从绘制简单连接开始是一个好的开始

您知道吗?开发一个不需要16个连接的新模式?除了加入,没有(最有可能的)更快的选择。(事实上,联接通常被用作EXISTS、NOT EXISTS、In、NOT In和子查询的快速替换)。除非你要分享你的模式,以及你想做什么,否则每个人都在猜测。我怀疑连接是你的问题。另外,请与前面的
EXPLAIN
分享运行查询的结果,以及模式详细信息。您能为您的两个语句提供引用吗?不连接超过7个表,视图如何提供帮助?我从未见过查询优化器处理复杂查询的方式与将某些联接抽象为视图的方式有任何不同。你是说
左联接
内部联接
性能更好吗?@AgRizzo:-不,我是说它们的性能更好,我只是说OP在某些情况下也可以使用左联接。我遗漏了什么吗?OP正在寻找替代方案,因为他们的查询速度太慢。@AgRizzo:-我认为没有任何连接替代方案。然而,我建议使用左连接,因为我认为这有助于操作。但是连接的替代方案看起来很难找到;)我的表非常令人沮丧,所有的表都被划分为小部分和映射,现在获取数据需要连接所有这些小部分,这就产生了问题。事实上,这就是我所说的及时停止的意思:-)根据您的需要,您需要在第3步或第4步进行反规范化。第五步几乎完全是理论上的。但这在很大程度上取决于数据库的使用和您的需求。