SQL優化 秒級優化,hint讓IN子查詢當驅動表

2021-09-13 18:35:58 字數 2174 閱讀 5771

python大資料與sql優化筆 qq群:771686295

在sql優化中,乙個比較重要的一點就是驅動表的選擇,hash join和nest loop來說驅動表的選擇是至關重要的。 

對於nest loop說最好是小表作為驅動表,與大表的連線鍵上減少索引,並且保證索引的選擇性比較好。

對於hash join小表作為驅動表是要hash進記憶體的,所以也要保證不能太大,如果hash join的都是大表,我們會在日後來分析怎麼優化。

具體sql是走hash join好還是nest loop好, 日後也會說說我的理解。

今天說的這個案例是存在in的子查詢,其實原理相同。

select ht.fwid as fwid,

ht.htcode as htcode,

ht.id as htid,

ht.htbadjh as htbadjh,

ht.fwdmffbh as fwdmffbh,

cxmsfxm as cxmsfxm,

cxmsfzjhm as cxmsfzjhm,

ht.fwdmxzqhdm as fwdmxzqhdm,

ht.fwdm as fwdm,

ht.fwdz as fwdz,

ht.jzmj as jzmj,

ht.fwyt as fwyt,

ht.qdrq as qdrq,

ht.basj as basj

from ha_spfht.tpn_xshtqd ht where  

id in

( select htid

from ha_spfht.tpn_htjydx jydx

where jydx.rylx = 2

and jydx.ryxm like '%***%'

and (jydx.zjhm is null or jydx.zjlb is null or (jydx.zjlb != 1 or jydx.zjhm like '%e122531385%'))

子查詢返回2條資料,整個sql要執行幾十分鐘。

sql走的是hash join, 理論上沒什麼問題,但是我們有更好的選擇。

在ryxm 建立索引了

最後sql在秒級完成

效能優化 Sql語句中HINT不起作用

今天在做效能測試的時候,發現資料庫的load很高,排查覺得sql的索引有問題,但是一時找不到原因,後來經過google發現是hint的問題 文摘如下 在select delete update後寫 hint 如 select index table name index name col1.注意 和...

mysql千萬級大資料SQL查詢優化

1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如 select id from t where num is null可以在num...

MySQl優化千萬資料級快速分頁sql語句

現在我們使用mysql對資料庫分頁就是直接使用limit了,這個是沒有錯誤了,如果幾萬條資料沒一種問題,如果是千萬條記錄你就會想死的心都有了,下面我來給各位朋友分析 資料表 collect id,title info vtype 就這4個字段,其中 title 用定長,info 用text,id 是...