SQL優化案例 正確的使用索引(二)

2021-08-20 06:26:47 字數 2662 閱讀 2274

下面

sql 

30秒執行出結果,檢視sql謂詞中有like,我們知道謂詞中有這樣的語句是不走索引的(為了保護客戶的隱私,表名和部分列已經重新命名)。

邏輯讀600多萬。檢視索引情況如下

表過濾返回資料量如下:

sql> select count(*) from oooo_***checklog;

2799616

select count(*) from oooo_***checklog where checkdate between date'2018-05-04' and date'2018-05-04' and ***type like '%par';

12856

select count(*) from oooo_***checklog where checkdate between date'2018-05-04' and date'2018-05-04';

197984

select /*+oooo_***checklog index(idx_id_type_re) 2*/

checknum as pingzbsm,

checkdate,

***mode,

***result,

(select result

from (select id,to_char(wmsys.wm_concat(***num||***type||***mode||***result)) result

from oooo_***checklog

where checkdate between date'2018-05-04' and date'2018-05-04' and reverse(***type) like 'rap%'

group by id

) b where b.id=a.id

) result,

clerknum as checknum

from ooo_***echecklog a;

檢視執行計畫如下,邏輯讀將為300萬,但是時間還是維持在

18秒,根本原因在於這個索引因為標量子查詢的問題被訪問

700萬次導致。

下面我們改寫sql如下

可以看到,邏輯讀降到64424,

50個物理讀是因為剛剛建立索引的原因,

sql也秒出。

sql優化 使用索引

專案中使用了大量的sql,對於查詢sql,如果沒有使用索引會對查詢速度造成很大的影響,例如如下sql select a.name,b.id from tablea a join tableb b on a.id b.other id where a.name test and b.pin 123 a...

SQL優化之索引使用

最近找工作,遇到乙個面試題 sql哪些關鍵字會忽略索引?因為之前沒這方面的經驗,當時懵逼了,隨便扯了一點。最終有沒能通過面試很遺憾。我們都知道對查詢進行優化,應盡量避免全表掃瞄,多使用索引,首先應考慮在 where 及 order by 涉及的列上建立索引。不過應該注意兩點 1 並不是所有索引對查詢...

MySQL優化 SQL及索引優化(二)

對支付時間建立索引 create index idx paydate on payment payment date 查詢 select max payment date from payment 在一條sql中同時查出2006年和2007年電影的數量 優化count 函式 對count函式使用的列...