替换在mysql中连接多个表

时间:2013-12-06 12:21:01

标签: mysql

我正在编写一个查询,我需要Inner连接超过16个表。 查询占用了太多时间来执行,我还在各个列上添加索引但仍面临同样的问题。

任何人都可以提出最佳选择吗?

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

我的表完全正常化数据库架构设计没有任何问题。

4 个答案:

答案 0 :(得分:0)

我已经读过,不建议在七张以上的桌子上加入。

我对你的架构一无所知,但我想知道VIEW是否可以帮助你。

答案 1 :(得分:0)

我认为JOINS没有其他选择。但根据您的要求,您可以在某些情况下使用LEFT JOIN而不是INNER JOIN。

你也可以放置EXISTS和NOT EXISTS的条件,但这不用看你的架构就是猜测

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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