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 ...