SQL語句優化

2021-07-25 22:59:15 字數 742 閱讀 8708

1、count(*) <---> count(列) 

沒有索引的情況下,兩者一樣快; 

有索引的情況下,如果這一列允許為 null,則count(列)快,若不允許為空,則一樣快! 

這是由於count(*)與count(列)不等價,count(*)所有列只要有一列不為null,就會被統計出來,count(列)只要這一列為null,就不會被統計出來! 

所以,count(列)所謂的快是沒有把資料統計完整!!! 

count(列)每一通是否相同? 

no! 列的偏移量決定效能,列越靠後,訪問的開銷越大!而count(*)的演算法與列無關,所以count(*)最快,count(最後一列)最慢! 

2、from後跟的表的順序 

oracle from 後的表執行順序是從後往前,所以就有規定:資料量少的表放在後面,資料量大的表放在前面。 

這個規定不是沒有道理,但是這個僅限於已經過時(select /*+rule*/ ...)這種方式,現在放前放後效能都一樣!

3、in exist 

oracle 10g ---> in用的是filter演算法,exist用的是anti演算法,anti的反連線演算法比filter演算法更高效,但要指定非空後,in用的也是anti演算法,這樣兩者效率就會相同! 

oracle 11g ---> in exist用的演算法都是anti的反連線演算法,所以效率一樣! 

待續......

SQL 語句優化 OR 語句優化案例

從上海來到溫州,看了前幾天監控的sql語句和資料變化,發現有一條語句的io次數很大,達到了150萬次io,而兩個表的資料也就不到20萬,為何有如此多的io次數,下面是執行語句 select ws.nodeid,wi.laststepid,wi.curstepid from workflowinfo ...

sql語句優化!

1.不要使用in操作符,這樣資料庫會進行全表掃瞄,推薦方案 在業務密集的sql當中盡量不採用in操作符 a 改為 a 4.is null 或is not null操作 判斷字段是否為空 5.及 操作符 大於或小於操作符 大於或小於操作符一般情況下是不用調整的,因為它有索引就會採用索引查詢,但有的情況...

SQL語句優化

explain sql 反饋sql語句執行資訊 1 優化 select min id as nid,uid pmzongfen updatetime picid gg from qd mouldu qd sell limit 1 select uid pmzongfen updatetime pic...