由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 请问个join的问题
相关主题
How to Import a Datatable as fast as possible?菜鸟问题,急
error of sql query in MS Access database (转载)SQL copy a table into a new table and add a new column
SQL combine two tables into one table and add a new column请教大虾问题哈,包子谢哈
怎样快速得到两个表的交集新手请教SQL 语法问题- alias 和 join
how to write this query紧急求助, 关于SQL Server
问个 sp_send_dbmail 的问题请教一个sql问题
一个有关查询的语句sql数据库实时更新问题
最近写了不少SQL script,请大牛评价下属于什么水平奇怪的 SQL 问题
相关话题的讨论汇总
话题: join话题: inner话题: select话题: table3话题: table4
进入Database版参与讨论
1 (共1页)
s*****n
发帖数: 2174
1
看到不同人写的sql语句用不用的join方法, 比如下面这两种写法:
SELECT
table1.id
FROM
table1
INNER JOIN table2 ON table1.id = table2.id
INNER JOIN table3 ON table1.id = table3.id
INNER JOIN table4 ON table1.id = table4.id
WHERE
table1.value > 0
AND table2.value > 0
AND table3.value > 0
AND table4.value > 0;
SELECT
table1.id
FROM
table1
INNER JOIN table2 ON table1.id = table2.id
AND table2.value > 0
INNER JOIN table3 ON table1.id = table3.id
AND table3.value > 0
INNER JOIN table4 ON table
a9
发帖数: 21638
2
如果value、id有索引的话,影响还是不少的吧?

【在 s*****n 的大作中提到】
: 看到不同人写的sql语句用不用的join方法, 比如下面这两种写法:
: SELECT
: table1.id
: FROM
: table1
: INNER JOIN table2 ON table1.id = table2.id
: INNER JOIN table3 ON table1.id = table3.id
: INNER JOIN table4 ON table1.id = table4.id
: WHERE
: table1.value > 0

s*****n
发帖数: 2174
3
也就是说把条件写在join的语句里面,
能够只join满足条件的那些行, 执行效率会高?

【在 a9 的大作中提到】
: 如果value、id有索引的话,影响还是不少的吧?
i****a
发帖数: 36252
4
I believe sql server query optimizer will make the same execution plan
from either. would be interesting to try and see

【在 s*****n 的大作中提到】
: 看到不同人写的sql语句用不用的join方法, 比如下面这两种写法:
: SELECT
: table1.id
: FROM
: table1
: INNER JOIN table2 ON table1.id = table2.id
: INNER JOIN table3 ON table1.id = table3.id
: INNER JOIN table4 ON table1.id = table4.id
: WHERE
: table1.value > 0

g***l
发帖数: 18555
5
我觉得应该是一样的
s*****n
发帖数: 2174
6
那也就是说不管怎么写, query optimzer都是先filter掉不相关的rows, 然后才开始
join了?
现在的问题是我要join的几个table都很大,
我希望在真正join之前, 能先根据一些确定的条件进行pre-filter,
考虑先给每个table做一个select ... where 生成temp table,
然后再join这四个temp tables.
如果query optimizer都是先filter的话, 那这样做就没必要了.
c*******e
发帖数: 8624
7
same
不过实际用起来总觉得写道where里面快
另外我是喜欢用第一种写法

【在 s*****n 的大作中提到】
: 看到不同人写的sql语句用不用的join方法, 比如下面这两种写法:
: SELECT
: table1.id
: FROM
: table1
: INNER JOIN table2 ON table1.id = table2.id
: INNER JOIN table3 ON table1.id = table3.id
: INNER JOIN table4 ON table1.id = table4.id
: WHERE
: table1.value > 0

u**d
发帖数: 211
8
如果 query 里有 selection,
push selection down 是标准的优化,所有 optimizer 都会做
如果你的 temp table 每次都 query 生成一遍,确实没有必要
但是如果你是做一个 temp table,然后每次 query 都用它
还是能快一些 ...

【在 s*****n 的大作中提到】
: 那也就是说不管怎么写, query optimzer都是先filter掉不相关的rows, 然后才开始
: join了?
: 现在的问题是我要join的几个table都很大,
: 我希望在真正join之前, 能先根据一些确定的条件进行pre-filter,
: 考虑先给每个table做一个select ... where 生成temp table,
: 然后再join这四个temp tables.
: 如果query optimizer都是先filter的话, 那这样做就没必要了.

s*****n
发帖数: 2174
9
我生成temp table的确只是生成一次, 用一次, 等于是人为
optimizer而已.
不过我昨天试了一下, 好像还是有作用的, 我把四个table一起
join, 系统直接就canceling request..., 分别预filter, 然后用
temp table再join, 就可以通过.
我的四个table里面, 一个150k行, 一个大约20m行, 另外两个
都是20b行. 其实预处理也只是把两个大table稍微reduce一点
而已, 一个从20b行减少到5b行, 另外一个减少到19b行.

【在 u**d 的大作中提到】
: 如果 query 里有 selection,
: push selection down 是标准的优化,所有 optimizer 都会做
: 如果你的 temp table 每次都 query 生成一遍,确实没有必要
: 但是如果你是做一个 temp table,然后每次 query 都用它
: 还是能快一些 ...

1 (共1页)
进入Database版参与讨论
相关主题
奇怪的 SQL 问题how to write this query
SQL question...问个 sp_send_dbmail 的问题
Help: "Operation Must Be Updatable Query"一个有关查询的语句
请问这个query怎么做最近写了不少SQL script,请大牛评价下属于什么水平
How to Import a Datatable as fast as possible?菜鸟问题,急
error of sql query in MS Access database (转载)SQL copy a table into a new table and add a new column
SQL combine two tables into one table and add a new column请教大虾问题哈,包子谢哈
怎样快速得到两个表的交集新手请教SQL 语法问题- alias 和 join
相关话题的讨论汇总
话题: join话题: inner话题: select话题: table3话题: table4