首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表中不必要的SQL

表中不必要的SQL
EN

Stack Overflow用户
提问于 2018-08-03 08:12:53
回答 2查看 87关注 0票数 0

我正在进行一个仅对应于一个表的查询,但是,正在搜索多个表。下面是一个类似的例子:

代码语言:javascript
复制
SELECT Earth.moon
FROM Earth, Mercury, Venus, Jupiter

没有理由搜索另一个星球的表,因为我们正在寻找只能在地球表中的列(Earth.moon)。但是,当包含水星、金星和木星时,查询会变得非常慢。

由于要搜索的列是动态填充的,因此不能简单地从查询中删除Mercury、Venus和Jupiter,如何避免搜索不必要的表?

EN

回答 2

Stack Overflow用户

发布于 2018-08-03 08:52:28

当您包含所有四个表时,您的查询将变得很慢,因为您正在生成“隐式交叉联接”。详情请参见Cross Join

只需删除不需要的表即可使查询速度更快。此外,交叉连接会产生相同行的多次重复,所有表上的每种可能的行组合都会产生一个重复行--也称为“笛卡尔积”。当每个表的行数很高时,这会使它变得非常慢。

票数 1
EN

Stack Overflow用户

发布于 2018-08-03 11:05:20

查询必须首先将所有Earth行连接到所有Mercury行,然后连接到所有Venus行,然后连接到所有Jupiter行,才能生成这个交叉连接表,称为Cartesian product

代码语言:javascript
复制
Earth.Moon  Mercury  Venus    Jupiter
==========  =======  =======  =========
Luna        No Moon  No Moon  Calysto
Luna        No Moon  No Moon  Ganymede
Luna        No Moon  No Moon  Io
etc.

您的查询可能只返回一列Earth.Moon,但该查询必须为4个表中的每个表中的每个行的组合生成单独的行。因此,您将得到一个非常无聊的列表,该列表对等于(# Earth rows) X (# Mercury Rows) X (# Venus Rows) X (# Jupiter Rows)的行重复“露娜”

代码语言:javascript
复制
Earth.Moon
==========
Luna
Luna
Luna
etc.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51663715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档