优化数据库语句的几个简单技巧

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语句。

相关文章
相关标签/搜索