您的位置:首页 > 博客中心 > 数据库 >

优化SQL的执行速度

时间:2022-03-13 22:36

/* 1.index的col_1列有运算 */  
SELECT *   
  FROM SomeTable  
 WHERE col_1 * 1.1 > 100;

这种情况改为 WHERE col_1  > 100/1.1即可。

  1. WHERE  col_1 IS NULL;

使用了is null的时候也是使用不了index的。这个时候可以做个函数index来解决。

  1. WHERE  SUBSTR(col_1, 1, 1) = ‘a‘;

index的列使用了函数。这个时候可以做个函数index来解决。

  1. WHERE  col_1 <> 100;

使用了否定形式。 (<>, !=,NOT EQUAL, NOT IN)也是一样的。

  1. WHERE  col_1 > 100  OR col_2 = ‘abc‘;

OR的时候最好改为in。 如果非要使用OR的话,追加bitmap index。

&times; SELECT  *   FROM  SomeTable  WHERE  col_1  LIKE ‘%a‘;  
&times; SELECT  *   FROM  SomeTable  WHERE  col_1  LIKE ‘%a%‘;  
○ SELECT  *   FROM  SomeTable  WHERE  col_1  LIKE ‘a%‘;

○ SELECT * FROM SomeTable WHERE col_1 = 10 AND col_2 = 100 AND col_3 = 500;  
○ SELECT * FROM SomeTable WHERE col_1 = 10 AND col_2 = 100 ;  
&times; SELECT * FROM SomeTable WHERE col_1 = 10 AND col_3 = 500 ;  
&times; SELECT * FROM SomeTable WHERE col_2 = 100 AND col_3 = 500 ;  
&times; SELECT * FROM SomeTable WHERE col_2 = 100 AND col_1 = 10 ;

假设col_1, col_2, col_3 列上有index,如果顺序不对的话不能使用index。

  1. rowid(Oracle)、oid(PostgreSQL)如果知道行号的话,行号访问最快。  

&times; SELECT * FROM SomeTable;  
○ SELECT col_1, col_2, col_3 FROM SomeTable;

最好只取需要的数据。这样可以减少零时表的大小,也能减少网络的通信量。

优化SQL的执行速度,布布扣,bubuko.com

热门排行

今日推荐

热门手游