標籤:

sql優化

索引相關:

1.盡量不用null判斷,因為null的話會全表遍歷,而不是使用索引,如果是字元串可以 >』,id可以>0

2.避免在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這些欄位排序實際上都是無用功
推薦閱讀:

SQL注入攻防入門詳解

TAG:SQL優化 |