想get data from 不同table, 但不join table

想效率好D, 所以唔直接join table
select * from a, b where a.x=b.y


所以咁寫
select * from a where x in (select y from b)


但我又想GET幾個B TABLE的FIELD, 咁句SQL應該點改?

好似無. 如果table唔大. 差無幾多

TOP

select * from a, b where a.x=b.y

select * from a where x in (select y from b)
根本上就是兩樣野.

假設a有10個record, b有10個record, x和y都是unique key, 而且每個都和對方有link, 第一句sql有100個record output, 第二句只有10個record output.

兩句野根本用法不同, 何況, 我寫SQL好少用 * , 因為一次過拎晒所有field好浪費時間.

TOP

這只是例子

TOP

如果要拎幾個table b 的 field, 就要用第一句了.
但請不要用*
樓主似乎還未熟sql的真正用法 (好似係....)
雖然, 我都係五十步笑一百步.

TOP

這只是例子
主人 發表於 2012-7-31 22:27


只可以講, 樓主唔識得用SQL

TOP

用join table 同sub-query 都係慢的

TOP

用join table 同sub-query 都係慢的
Wai 發表於 2012-7-31 23:10



咁點做會比較好?

TOP

join table 正常都快過 sub-query (最簡單用explain比較下)
而且你個 case 應該一定要 join
如果想推 performance 我覺得係 table schema 著手效果會明顯D (index)
同埋你係想一次list曬出黎?可唔可以做paging?

TOP

你咁樣寫SubQuery ...個Performance 會更差,因為個Execution plan係Outer query 每read一個Row..你就要行select y from b一次

SubQuery Performance 唔會好得過Join...

TOP