下面
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函式使用的列...