資料庫的優化(非連線查詢和連線查詢的巧用)

2021-05-26 18:30:12 字數 1468 閱讀 4014

對於同乙個問題, 在資料庫查詢的時間有很多方法,都能實現自己想要的結果,但是速度有快又慢,這就涉及到資料庫的優化問題,雖然小生不才,真正剛剛接觸資料庫不久,但是遇到乙個問題,感覺屬於乙個常見問題。情況是這樣的

在張總表(t_product_sale商品的總的生產和銷售表)裡面,還有二關聯的表(乙個是**商退貨表t_oda,還有個是售後維修表t_repair。),現在要根據這三個表要匯出另外乙個表(t_return)

當我想算出本月的銷售量的時候問題就出現了,

一種方法是要可以根據t_return的引數(月份,商品型號)來給t_product_sale表來進行連線查詢。

select replace (convert(char(7),b.scan_date),'/','') as monthtype

,count(*) as amountsale

,gdsname as gdsname

into #amtsaletemp

from t_return a

,t_product_sale b

where a.monthtype = replace (convert(char(7),b.scan_date),'/','')

group by replace (convert(char(7),b.scan_date),'/',''),gdsname

另外乙個方法是通過t_product_sale自身查詢。

sql如下:

select dbo.f_tanc_monthtype(scan_date) as monthtype

,gdsname = ( case

when item_name like '%ideapadu%' then 'u1pad'

else 'y1011' end)

,count(*) as amountsale

into #amtsaletemp

from t_product_sale 

group by dbo.f_tanc_monthtype(scan_date)

,( case

when item_name like '%ideapadu%' then 'u1pad'

else 'y1011' end)

第一種方法實現的時間是一1分鐘30多秒,第二種方法用了五秒,而且第二種方法還把所有行數出來了,第乙個只把t_return要求的行數查詢出來了

反思一下這樣的情況,其實是考慮問題的角度不一樣,一種是很直接的的連線查詢(按條件根據要求去查詢),另乙個是從全域性來看非連線查詢就搞定了

最終都是通過#amtsale這個臨時表

update a

set a.amountfr=b.amountfr

from t_return a

,#amtsale b

where a.monthtype=b.monthtype

and a.gdsname = b.gdsname

來把資料更新到表t_return裡面

資料庫查詢內連線,外連線,各種查

一 外連線 1.概念 包括左向外聯接 右向外聯接或完整外部聯接 2.左連線 left join 或 left outer join 1 左向外聯接的結果集包括 left outer 子句中指定的左表的所有 行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有 匹配行,則在相關聯的結果集行中右表...

資料庫連線和查詢

time 上午 8 42 phpinfo 連線mysql伺服器並選擇資料庫 link new mysqli localhost root root test 1802 3306 echo var dump link echo link 連線成功 連線失敗 connect errno 上一次連線的錯誤...

資料庫多表連線查詢 外連線和內連線

本文主要列舉兩張和三張表來講述多表連線查詢。新建兩張表 表1 student 截圖如下 表2 course 截圖如下 此時這樣建表只是為了演示連線sql語句,當然實際開發中我們不會這樣建表,實際開發中這兩個表會有自己不同的主鍵。一 外連線 外連線可分為 左連線 右連線 完全外連線。1 左連線 lef...