我本人是個菜鳥,寫部落格的目的只是記錄下我當時碰到的問題以及是怎麼解決的,第一次寫部落格,有什麼不對的地方希望大家指正。
廢話不多說,我直接貼sql吧。
select distinct
org_name,
current_time()
from(
select org_name,
current_time()
from succez_dfdw.fact_zqx_tmp zqx
where not exists (select 1 from succez_dfdw.dfba3_base_032 qy where zqx.org_name = qy.`key`)
and zqx.org_name is not null
select org_name
,current_timestamp
from(
select
distinct org_name
from succez_dfdw.fact_zqx_tmp zqx
where not exists (select 1 from succez_dfdw.dfba3_base_032 qy where zqx.org_name = qy.`key`)
and zqx.org_name is not null
)x ;
)x ;
我們看上下兩個sql,發現只是把distinct的位置放的不一樣,這裡的current_time只是生成時間戳顯示當前的日期,主要的目的還是去電重複的org_name列。
筆者但是的情況是4個字段,不是現在的兩個字段。在當時30w資料量的時候,上面與下面的執行時間相差十幾秒,公升為乙個碼農,這是不能容忍的。
但是為什麼上面的一條執行的比較慢,下面的一條比較快呢?
這是因為distinct去重語句會預設對結果集進行排序。
打個比方,如果我們在找出幼兒園小朋友身高的發育水平,最好的辦法是小朋友們按照公升高排序,然後統計身高值與人數值。
此時身高120cm的小朋友會佔在一起,身高123cm的小朋友會站在一起。
若此時使用distinct對身高排序,我們只需去重,取120cm的值一次,123cm的值一次。
在資料庫中,distinct去重的時候先排序,這種相等的值會放在一起,這樣的話就方便去重。
平時無數資料庫的前輩告訴我們,distinct,group by ,union 會預設排序,但是自己再寫sql的時候稍有不慎就可能犯錯。
改寫SQL語句優化MySQL效能
一 問題的提出 在應用系統開發初期,由於開發資料庫資料比較少,對於查詢sql語句,複雜檢視的的編寫等體會不出sql語句各種寫法的效能優劣,但是如果將應用系統提交實際應用後,隨著資料庫中資料的增加,系統的響應速度就成為目前系統需要解決的最主要的問題之一。系統優化中乙個很重要的方面就是sql語句的優化。...
Oracle 查詢優化器 改寫查詢語句
start 當我們執行一條查詢語句的時候,我們只告訴 oracle 我們想要哪些資料,至於資料在 怎麼找,那是查詢優化器的事情,優化器需要改寫查詢語句,決定訪問路徑 如 全表掃瞄,快速全索引掃瞄,索引掃瞄 決定表聯接順序等。至於選擇哪種方式,優化器需要根據資料字典做出判斷。那優化器如何改寫查詢語句呢...
mysql 語句優化例項 MySQL 語句優化例項
優化 limit 分頁 執行耗時 1.379s select from vio basic domain info limit 1000000,10 處理分頁慢查詢的方式一般有以下幾種 思路一 構造覆蓋索引 思路二 優化 offset 無法用上覆蓋索引,那麼重點是想辦法快速過濾掉前 100w 條資料...