sql優化
04-23
索引相關:
1.盡量不用null判斷,因為null的話會全表遍歷,而不是使用索引,如果是字元串可以 >』,id可以>02.避免在where條件用or,如果一個有索引一個沒有可以分開查用union,否則會變成全表查詢3.有些情況可以用exists替換in,exists會先循環外部,在查子查詢,in 是做hash連表查詢,如果外部表比子查詢的表小很多,exists會比較快
4.避免在where語句中使用函數和表達式eg:where to_char(created_at, yyyy-mm-dd) = 2017-04-17 改成 created_at>=2017-04-17 00:00:00 and created_at<=2017-04-17 24:00:00,用表達式或函數的時候不會用索引
5.如果是複合索引,最好條件和索引順序一樣6. 最好不使用like, 1).like %keyword 索引失效,使用全表掃描。[但可以通過翻轉函數+like前模糊查詢+建立翻轉函數索引=走翻轉函數索引,不走全表掃描。] (待研究) 2). like keyword% 索引有效。3). like %keyword% 索引失效,也無法使用反向索引。
group:group
無非就是想分組計算並且想拿到nss的name,code,type和np的name,code這裡可以先group nss和np的id然後在外面再join nss,np因為分組的同時還會排序,這裡對name,code,type這些欄位排序實際上都是無用功
推薦閱讀:
TAG:SQL優化 |