使用from中的子查詢來優化join

2021-05-22 18:21:45 字數 1286 閱讀 3797

create 

table 

`fact` 

(`i` int(10

) unsigned 

not 

null,

`val` int(10

) unsigned 

not 

null,

key 

`i` 

(`i`,

`val`

) )

create 

table 

`dim` 

(`id` int(10

) unsigned 

not 

null 

auto_increment,

`pad` varchar

(100

) not 

null,

primary 

key  

(`id`

) )

a)select count

(* ) 

from dim

30720

b)select count

(* ) 

from fact

7340032

c)select count(*) from fact where i<10000

733444

d)select count(*) from fact left join dim on val=id where i<10000

733444

以下查詢哪個更快?

(1)select i,pad from fact left join dim on val=id where i<10000 limit 500000,10;

(2)select i,pad from (select i,val from fact where i<10000 limit 500000,10) res left join dim on val=id;

第乙個查詢:從fact表中得到i<10000的行,再和dim進行連線;連線後,從第500000行起取10行(相當於最多7340032+733444*30720行要被掃瞄)

第二個查詢:從fact表中得到i<10000的行,從第500000行起取10行;再和dim表進行連線(相當於最多7340032+10*30000行要被掃瞄)

顯然第二個查詢更快,那麼第二個查詢和第乙個查詢的結果相等嗎?

由於上述c和d查詢返回的行數相同,說明fact表中的每一行在dim表中都有相應的行與之對應,因此第二個查詢和第乙個查詢是結果是相同的;因此,在上述情況下,使用第二個查詢更快!

SQL優化 使用關聯查詢代替子查詢

sql優化 使用關聯查詢代替子查詢 測試例子 子查詢 selecta.select workflowname from workflowbase whereid workflowid workflowname from zping.com a where a.operator 402882ed111...

連表查詢時,from後子句的執行順序和優化

今天我遇到乙個面試題 from後面的子句,它的執行順序是從左向右還是從右向左?如何進行優化?我猛然的愣住了,因為我畢竟不是專搞資料庫的,我只能憑感覺說出了從右向左。至於為什麼,我也說不出來個所以然。後來和專搞資料庫的同事商量了一下,大概做出了如下結論 比如乙個sql查詢語句 select from ...

mysql 使用子查詢 MySQL 子查詢的使用

mysql 子查詢的使用 什麼是子查詢 子查詢是將乙個 select 語句的查詢結果作為中間結果,供另乙個 sql 語句呼叫。像這樣 我們將學生表中的所有班級id當做中間結果 select from t class where c id in select distinct c id from t ...