SQL優化 Filter正名

2021-09-28 19:36:55 字數 1932 閱讀 8924

之前我寫過一篇部落格分析filter也有效能好的一面,最近看了一下,感覺說的不夠淺顯易懂,這裡再寫一篇。

1 資料準備

drop table emp1;

drop table dept1;

create table emp1 as select * from emp;

insert into emp1 select * from emp1;

insert into emp1 select * from emp1;

insert into emp1 select * from emp1;

insert into emp1 select * from emp1;

insert into emp1 select * from emp1;

insert into emp1 select * from emp1;

insert into emp1 select * from emp1;

insert into emp1 select * from emp1;

create table dept1 as select * from dept;

insert into dept1 select * from dept1;

insert into dept1 select * from dept1;

insert into dept1 select * from dept1;

insert into dept1 select * from dept1;

insert into dept1 select * from dept1;

insert into dept1 select * from dept1;

insert into dept1 select * from dept1;

insert into dept1 select * from dept1;

commit;

2 需求分析

需求很簡單,大家直接看sql理解吧。

3 sql改寫

select count(distinct e.empno)

from emp1 e

where e.empno=7788

or e.deptno in (select deptno

from dept1 d

where d.dname='sales');

雖然有filter,但是結果還是秒出了。

我們發現,filter消除後,執行時間大幅度增加。

原因很簡單,我們回想filter連線的演算法,第一次連線後,連線的結果會被快取,記憶體中會維護乙個table,結構如下

這樣,emp1表向dept1表傳值進行判定時,先去快取的表裡檢索,如果發現結構已經快取,那麼直接從快取裡取值,避免了dept1表的再檢索。

但是,消除filter後,第一,emp1要多掃瞄一次,第二,看到執行計畫中,記憶體使用也要相應多很多,在連線計算上,成本也要高出很多。

所以,表裡面連線列重複值很多時,filter有時候效能也很好。具體問題具體分析。

真正的SEO 為搜尋引擎優化正名

國內從事seo工作的大致有以下幾種 1 在某個大型 工作,主要負責這個 的seo。根據 的規模,可能是乙個人,也可能是乙個團隊。目前國內seo的頂極高手,大多在這樣的公司,但是他們默默無聞,很少有人知道他們的名字,他們也很少到處宣傳。雖然有的公司放出話來,願意高薪挖人,卻是尋人無門。在這一點上可以看...

查詢優化 SQL優化

查詢優化注意點 代表查詢速度比較 1 所有查詢必須注意 的使用必要性 cout 1 cout 2 字段 主鍵索引 字段 普通索引 字段 沒有索引 3 乙個字段 多個字段 欄位多越慢 4 大於10000和大於10001的區別 後者大於前者 5 列沒別名 列 有別名6 兩個條件,where時應該將符合資...

SQL優化 索引優化

一 發現哪些sql語句有效能問題 開啟mysql慢查詢日誌對sql語句進行監控 show variables like slow query log 檢視是否開啟慢查詢日誌 set global slow query log on 開啟慢查詢日誌 set global log queries not...