優化數據庫語句的幾個簡單技巧

1. 索引sql

a. SQL語句的 where 和 join 部分中用到的字段,都應該加上索引。優化

 

b. 儘可能用加索引的字段進行直接判斷,不要對加索引的字段進行轉化後再判斷,由於這樣會致使加的索引無效,達不到優化的效果。blog

e.g. 查詢A表中全部2016年的數據索引

CREATE INDEX A_idx ON A (date_column);

SELECT text, date_column
  FROM A
 WHERE TO_CHAR(date_column, 'YYYY') = '2016';

 上述的索引 date_column並無生效,這個查詢能夠改成比較 date_column 的範圍。字符串

SELECT text, date_column
  FROM A
 WHERE date_column >= TO_DATE('2016-01-01', 'YYYY-MM-DD')
   AND date_column <  TO_DATE('2016-01-01', 'YYYY-MM-DD');

 

c. 創建的索引,儘量的 cover 你的 SQL 語句。class

e.g. 下面2個查詢語句都用了A表中的b字段效率

CREATE INDEX A_idx ON A (a, b);

SELECT id, a, b
  FROM A
 WHERE a = :a
   AND b = :b;

SELECT id, a, b
  FROM A
 WHERE b = :b;

索引 cover 了第一個 select 語句,可是第二個 SQL 語句並無最大程度的利用索引。能夠對索引進行修改以達到最大利用的效果。date

CREATE INDEX A_idx ON A(b, a);

 

d. 加索引的字段,若是進行了 like 通配符過濾某些字符串,這時候的索引是無效的。
select

CREATE INDEX A_idx ON A (text);

SELECT id, text
  FROM A
 WHERE text LIKE '%TERM%';

 注意: 若是整個查詢全部引用的列都包含在索引中,那麼這個查詢就不須要直接訪問表,查詢速度就會提升。sql語句

 

2. 移除不須要的表和字段

不要將不須要的字段返回 SQL 客戶端。

不要在SQL語句查詢不須要的表

 

3. 移除外部連接

4. 儘可能不要對字段進行轉換後再比較

直接用原有字段查詢比轉換後再查詢的效率高。好比本文第一個查詢2016年數據的sql語句。

相關文章
相關標籤/搜索