之前我寫過一篇部落格分析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...