mysql的語句改寫與優化

2021-08-06 02:45:22 字數 1295 閱讀 2071

我本人是個菜鳥,寫部落格的目的只是記錄下我當時碰到的問題以及是怎麼解決的,第一次寫部落格,有什麼不對的地方希望大家指正。

廢話不多說,我直接貼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 條資料...