一次Sql語句的優化實戰之旅

2021-08-01 04:02:54 字數 1757 閱讀 2056

資料量很大,優化前差不多2分鐘,優化後1s.

低效sql:

select col1,col2,col3 from

table

where id in(1,2,3,4,5);

高效sql:

select col1,col2,col3 from

table

where id=1

union

allselect col1,col2,col3 from

table

where id=2

union

allselect col1,col2,col3 from

table

where id=3

union

allselect col1,col2,col3 from

table

where id=4

union

allselect col1,col2,col3 from

table

where id=5

當時用分頁需要計算總的記錄數時,count(1) over()的效率遠遠高於 count(1)

低效sql:

select

count(1) from

table t1 left

outer

join table2 t2

on t1.col1=t2.col2

或者select col1,col2 from (select col1,col2, row_number() over(col) as [num] from

table

where

1=1 ) as temp1 where [num] >= startindex and [num] <= endindex ;

select

count(1) as [totalcount] from

table

where

1=1;

高效sql:

select totalcount=count(1) over() from

table t1 left

outer

join table2 t2 on t1.col1=t2.col2

或者select col1,col2,totalcount from (select col1,col2, row_number() over(col) as [num],count(*) over() totalcount from

table

where

1=1 ) as temp1 where [num] >= startindex and [num] <= endindex

低效的sql:

select col1,col2 from

table

where col in(select

max(col) from

table

group

by col1,col2 order

by col desc)

高效的sql:

select col1,col2 from (select num=row_number() over(partition by col1,col2 order

by col desc) from

table ) where num=1

一次簡單的SQL語句優化

最近寫了乙個查詢語句,為了做這個查詢建立了一些view,最終的view中包含了另外兩個view。這個sql的查詢要傳入乙個條件語句,最後發現這個sql語句會隨著資料量的增加而越來越耗時。即使為所有可以建立索引的地方都已經建立了索引也沒有用。用explain解釋之後發現這個語句在執行其中的子查詢時是查...

記一次SQL優化

問題發生在關聯主表a 4w資料量 和副表b 4w資料量 關聯欄位都是openid 當時用的是 left join 直接跑sql,卡死 伺服器也是差 優化1 改left join 為join,兩者區別就是left join查詢時已主表為依據,該是幾條就幾條 就算副表沒有關聯的資料 join如果副表沒有...

一次SQL優化經歷

最近遇到乙個sql執行很慢。這個sql比較長,但基本的形態比較簡單 select t1.t2.c1 from t1 left join t2 on t1.c1 t2.c1 left join t3 on t1.c2 t3.c1 left join t3 on t1.c3 t3.c1 執行explai...